Skip to content

Commit 99127d0

Browse files
committed
feat: add solutions to lc problem: No.0455
No.0455.Assign Cookies
1 parent 17c3e8c commit 99127d0

File tree

7 files changed

+230
-99
lines changed

7 files changed

+230
-99
lines changed

solution/0400-0499/0455.Assign Cookies/README.md

Lines changed: 84 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,22 +47,95 @@
4747

4848
<!-- 这里可写通用的实现逻辑 -->
4949

50+
**方法一:排序 + 贪心**
51+
52+
时间复杂度 $O(mlogm+nlogn)$,其中 $m$ 表示 $g$ 的长度,$n$ 表示 $s$ 的长度。
53+
5054
<!-- tabs:start -->
5155

5256
### **Python3**
5357

5458
<!-- 这里可写当前语言的特殊实现逻辑 -->
5559

5660
```python
57-
61+
class Solution:
62+
def findContentChildren(self, g: List[int], s: List[int]) -> int:
63+
g.sort()
64+
s.sort()
65+
j = 0
66+
for i, v in enumerate(g):
67+
while j < len(s) and s[j] < v:
68+
j += 1
69+
if j >= len(s):
70+
return i
71+
j += 1
72+
return len(g)
5873
```
5974

6075
### **Java**
6176

6277
<!-- 这里可写当前语言的特殊实现逻辑 -->
6378

6479
```java
80+
class Solution {
81+
public int findContentChildren(int[] g, int[] s) {
82+
Arrays.sort(g);
83+
Arrays.sort(s);
84+
int i = 0, j = 0;
85+
for (; i < g.length; ++i) {
86+
while (j < s.length && s[j] < g[i]) {
87+
++j;
88+
}
89+
if (j >= s.length) {
90+
break;
91+
}
92+
++j;
93+
}
94+
return i;
95+
}
96+
}
97+
```
98+
99+
### **C++**
100+
101+
```cpp
102+
class Solution {
103+
public:
104+
int findContentChildren(vector<int>& g, vector<int>& s) {
105+
sort(g.begin(), g.end());
106+
sort(s.begin(), s.end());
107+
int i = 0, j = 0;
108+
for (; i < g.size(); ++i) {
109+
while (j < s.size() && s[j] < g[i]) {
110+
++j;
111+
}
112+
if (j >= s.size()) {
113+
break;
114+
}
115+
++j;
116+
}
117+
return i;
118+
}
119+
};
120+
```
65121
122+
### **Go**
123+
124+
```go
125+
func findContentChildren(g []int, s []int) int {
126+
sort.Ints(g)
127+
sort.Ints(s)
128+
i, j := 0, 0
129+
for ; i < len(g); i++ {
130+
for ; j < len(s) && s[j] < g[i]; j++ {
131+
}
132+
if j >= len(s) {
133+
break
134+
}
135+
j++
136+
}
137+
return i
138+
}
66139
```
67140

68141
### **JavaScript**
@@ -74,19 +147,18 @@
74147
* @return {number}
75148
*/
76149
var findContentChildren = function (g, s) {
77-
let len1 = g.length,
78-
len2 = s.length;
79-
if (len2 === 0) return 0;
80150
g.sort((a, b) => a - b);
81151
s.sort((a, b) => a - b);
82-
let i = 0,
83-
j = 0;
84-
while (i < len1 && j < len2) {
85-
while (s[j] < g[i]) j++;
86-
if (s[j] >= g[i]) {
87-
i++;
88-
j++;
89-
} else break;
152+
let i = 0;
153+
let j = 0;
154+
for (; i < g.length; ++i) {
155+
while (j < s.length && s[j] < g[i]) {
156+
++j;
157+
}
158+
if (j >= s.length) {
159+
break;
160+
}
161+
++j;
90162
}
91163
return i;
92164
};

solution/0400-0499/0455.Assign Cookies/README_EN.md

Lines changed: 80 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,82 @@ You need to output 2.
4545
### **Python3**
4646

4747
```python
48-
48+
class Solution:
49+
def findContentChildren(self, g: List[int], s: List[int]) -> int:
50+
g.sort()
51+
s.sort()
52+
j = 0
53+
for i, v in enumerate(g):
54+
while j < len(s) and s[j] < v:
55+
j += 1
56+
if j >= len(s):
57+
return i
58+
j += 1
59+
return len(g)
4960
```
5061

5162
### **Java**
5263

5364
```java
65+
class Solution {
66+
public int findContentChildren(int[] g, int[] s) {
67+
Arrays.sort(g);
68+
Arrays.sort(s);
69+
int i = 0, j = 0;
70+
for (; i < g.length; ++i) {
71+
while (j < s.length && s[j] < g[i]) {
72+
++j;
73+
}
74+
if (j >= s.length) {
75+
break;
76+
}
77+
++j;
78+
}
79+
return i;
80+
}
81+
}
82+
```
83+
84+
### **C++**
85+
86+
```cpp
87+
class Solution {
88+
public:
89+
int findContentChildren(vector<int>& g, vector<int>& s) {
90+
sort(g.begin(), g.end());
91+
sort(s.begin(), s.end());
92+
int i = 0, j = 0;
93+
for (; i < g.size(); ++i) {
94+
while (j < s.size() && s[j] < g[i]) {
95+
++j;
96+
}
97+
if (j >= s.size()) {
98+
break;
99+
}
100+
++j;
101+
}
102+
return i;
103+
}
104+
};
105+
```
54106
107+
### **Go**
108+
109+
```go
110+
func findContentChildren(g []int, s []int) int {
111+
sort.Ints(g)
112+
sort.Ints(s)
113+
i, j := 0, 0
114+
for ; i < len(g); i++ {
115+
for ; j < len(s) && s[j] < g[i]; j++ {
116+
}
117+
if j >= len(s) {
118+
break
119+
}
120+
j++
121+
}
122+
return i
123+
}
55124
```
56125

57126
### **JavaScript**
@@ -63,19 +132,18 @@ You need to output 2.
63132
* @return {number}
64133
*/
65134
var findContentChildren = function (g, s) {
66-
let len1 = g.length,
67-
len2 = s.length;
68-
if (len2 === 0) return 0;
69135
g.sort((a, b) => a - b);
70136
s.sort((a, b) => a - b);
71-
let i = 0,
72-
j = 0;
73-
while (i < len1 && j < len2) {
74-
while (s[j] < g[i]) j++;
75-
if (s[j] >= g[i]) {
76-
i++;
77-
j++;
78-
} else break;
137+
let i = 0;
138+
let j = 0;
139+
for (; i < g.length; ++i) {
140+
while (j < s.length && s[j] < g[i]) {
141+
++j;
142+
}
143+
if (j >= s.length) {
144+
break;
145+
}
146+
++j;
79147
}
80148
return i;
81149
};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public:
3+
int findContentChildren(vector<int>& g, vector<int>& s) {
4+
sort(g.begin(), g.end());
5+
sort(s.begin(), s.end());
6+
int i = 0, j = 0;
7+
for (; i < g.size(); ++i) {
8+
while (j < s.size() && s[j] < g[i]) {
9+
++j;
10+
}
11+
if (j >= s.size()) {
12+
break;
13+
}
14+
++j;
15+
}
16+
return i;
17+
}
18+
};
Lines changed: 9 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,14 @@
1-
/* 455 分发饼干
2-
* 解法
3-
* 每个小朋友只能最多拥有一块饼干,先满足胃口最大的小孩,剩下的就更容易分配
4-
* 由于题目没有预先给 g、s 进行排序,需要自己实现快速排序,这里利用goroutine并行运算加速
5-
*
6-
* 21/21 cases passed (40 ms)
7-
* memory usage (6 MB)
8-
*/
9-
101
func findContentChildren(g []int, s []int) int {
11-
done1 := make(chan struct{})
12-
done2 := make(chan struct{})
13-
go quickSort_go(g, 0, len(g)-1, done1, 4)
14-
go quickSort_go(s, 0, len(s)-1, done2, 4)
15-
<-done1
16-
<-done2
17-
i, j, ret := len(g)-1, len(s)-1, 0
18-
for i >= 0 && j >= 0 {
19-
if g[i] > s[j] {
20-
i--
21-
} else {
22-
ret++
23-
i--
24-
j--
2+
sort.Ints(g)
3+
sort.Ints(s)
4+
i, j := 0, 0
5+
for ; i < len(g); i++ {
6+
for ; j < len(s) && s[j] < g[i]; j++ {
257
}
26-
}
27-
return ret
28-
}
29-
30-
* 快速排序
31-
func quickSort(a []int, lo, hi int) {
32-
if lo >= hi {
33-
return
34-
}
35-
p := partition(a, lo, hi)
36-
quickSort(a, lo, p-1)
37-
quickSort(a, p+1, hi)
38-
}
39-
func partition(a []int, lo, hi int) int {
40-
pivot := a[hi]
41-
i := lo - 1
42-
for j := lo; j < hi; j++ {
43-
if a[j] < pivot {
44-
i++
45-
a[j], a[i] = a[i], a[j]
8+
if j >= len(s) {
9+
break
4610
}
11+
j++
4712
}
48-
a[i+1], a[hi] = a[hi], a[i+1]
49-
return i + 1
50-
}
51-
func quickSort_go(a []int, lo, hi int, done chan struct{}, depth int) {
52-
if lo >= hi {
53-
done <- struct{}{}
54-
return
55-
}
56-
depth--
57-
p := partition(a, lo, hi)
58-
if depth > 0 {
59-
childDone := make(chan struct{}, 2)
60-
go quickSort_go(a, lo, p-1, childDone, depth)
61-
go quickSort_go(a, p+1, hi, childDone, depth)
62-
<-childDone
63-
<-childDone
64-
} else {
65-
quickSort(a, lo, p-1)
66-
quickSort(a, p+1, hi)
67-
}
68-
done <- struct{}{}
13+
return i
6914
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public int findContentChildren(int[] g, int[] s) {
3+
Arrays.sort(g);
4+
Arrays.sort(s);
5+
int i = 0, j = 0;
6+
for (; i < g.length; ++i) {
7+
while (j < s.length && s[j] < g[i]) {
8+
++j;
9+
}
10+
if (j >= s.length) {
11+
break;
12+
}
13+
++j;
14+
}
15+
return i;
16+
}
17+
}

solution/0400-0499/0455.Assign Cookies/Solution.js

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,18 @@
44
* @return {number}
55
*/
66
var findContentChildren = function (g, s) {
7-
let len1 = g.length,
8-
len2 = s.length;
9-
if (len2 === 0) return 0;
107
g.sort((a, b) => a - b);
118
s.sort((a, b) => a - b);
12-
let i = 0,
13-
j = 0;
14-
while (i < len1 && j < len2) {
15-
while (s[j] < g[i]) j++;
16-
if (s[j] >= g[i]) {
17-
i++;
18-
j++;
19-
} else break;
9+
let i = 0;
10+
let j = 0;
11+
for (; i < g.length; ++i) {
12+
while (j < s.length && s[j] < g[i]) {
13+
++j;
14+
}
15+
if (j >= s.length) {
16+
break;
17+
}
18+
++j;
2019
}
2120
return i;
2221
};

0 commit comments

Comments
 (0)