Skip to content

Commit c657d21

Browse files
committed
#455 贪心算法 给孩子分饼干
1 parent 93ffab9 commit c657d21

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package greedy;
2+
3+
import java.util.Arrays;
4+
5+
/**
6+
* 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。
7+
* 但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,
8+
* 这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,
9+
* 都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,
10+
* 这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。
11+
* 思路:
12+
* 1. 给一个孩子的饼干应当尽量小并且又能满足该孩子,这样大饼干才能拿来满足满足度比较大的孩子
13+
* 2. 因为满足度最小的孩子最容易满足,所以先满足满足度最小的孩子
14+
* 最优:尽量多的孩子分到饼干,那么每个孩子的饼干最接近其满足度
15+
*/
16+
public class LC_455_AssignCookie {
17+
18+
/**
19+
* 满足孩子,胃口最小的孩子,优先满足,并且使用最靠近的饼干
20+
*/
21+
public int findContentChildren(int[] g, int[] s) {
22+
if (g.length == 0 || s.length == 0) return 0;
23+
Arrays.sort(g);
24+
Arrays.sort(s);
25+
int gi = 0, sj = 0;
26+
while (gi < g.length && sj < s.length) {
27+
if (g[gi] <= s[sj]) {
28+
// 当前最优解,用最小饼干满足小孩子最小的胃口
29+
gi++;
30+
}
31+
sj++;
32+
}
33+
return gi;
34+
}
35+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package greedy;
2+
3+
import org.junit.Test;
4+
5+
import static org.hamcrest.core.Is.is;
6+
import static org.junit.Assert.assertThat;
7+
8+
/**
9+
* @author alis
10+
* @date 2019/11/3 1:02 AM
11+
* @description
12+
*/
13+
public class LC_455_AssignCookieTest {
14+
15+
private LC_455_AssignCookie assignCookie = new LC_455_AssignCookie();
16+
17+
18+
@Test
19+
public void findContendChildren() {
20+
assertThat(assignCookie.findContentChildren(new int[]{1, 2, 3}, new int[]{1, 1}), is(1));
21+
assertThat(assignCookie.findContentChildren(new int[]{1, 2}, new int[]{1, 2, 3}), is(2));
22+
assertThat(assignCookie.findContentChildren(new int[]{10,9,8,7}, new int[]{5,6,7,8}), is(2));
23+
}
24+
}

0 commit comments

Comments
 (0)