题目地址:
https://www.lintcode.com/problem/assign-cookies/description
给定两个数组, A A A代表若干小朋友的贪吃指数, B B B代表若干糖果的尺寸,一个小朋友如果吃了大于其贪吃指数的尺寸的糖果,则可以得到满足。每个小朋友最多吃一个糖果。问最多能有多少小朋友得到满足。
先将 A A A和 B B B都从小到大排序,然后优先用尺寸最小的糖果满足贪心指数最小的小朋友,这样的方案是使得被满足的小朋友数量最多的方案。证明可以使用调整法,如果有哪个糖果没有满足贪吃指数最小的小朋友,那就做调换;同理,如果某个小朋友被尺寸太大的糖果满足,那也可以做调整。代码如下:
import java.util.Arrays;
public class Solution {
/**
* @param g: children's greed factor
* @param s: cookie's size
* @return: the maximum number
*/
public int findContentChildren(int[] g, int[] s) {
// Write your code here
Arrays.sort(g);
Arrays.sort(s);
int res = 0, i = 0, j = 0;
while (i < g.length && j < s.length) {
// 找到尺寸最小的满足g[i]的糖果
while (j < s.length && s[j] < g[i]) {
j++;
}
// 如果找不到则退出循环
if (j == s.length) {
break;
}
// 找到了,则满足之
res++;
i++;
j++;
}
return res;
}
}
时间复杂度 O ( l A log l A + l B log l B ) O(l_A\log l_A+l_B\log l_B) O(lAloglA+lBloglB),空间 O ( 1 ) O(1) O(1)。