AssignCookies [source code]
public class AssignCookies {
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(s);
Arrays.sort(g);
int i = g.length - 1, j = s.length - 1;
int count = 0;
while (i >= 0 && j >= 0) {
if (s[j] >= g[i]) {
count++;
i--;
j--;
} else {
i--;
}
}
return count;
}
public static void main(String[] args) {
AssignCookies tester = new AssignCookies();
int[] i1ar1 = {1,2,3};
int[] i1ar2 = {1,1};
int[] i2ar1 = {1,2};
int[] i2ar2 = {1,2,3};
System.out.println(tester.findContentChildren(i2ar1, i2ar2));
}
}
总体算法还是比较简单的, 这个题目其实不难想到用 greedy 来解; 当然为了实现 greedy, 上来先两个 sort 最好了;
速度是16ms, 居然是99%. 不知道这个题目为什么别人反而没有我做的好了; 这个答案还是一次就做到的;
这个是discussion 里面的一个最优解:
public class Solution {
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int pointG = 0;
int pointS = 0;
while (pointG<g.length && pointS<s.length) {
if (g[pointG]<=s[pointS]) {
pointG++;
pointS++;
} else {
pointS++;
}
}
return pointG;
}
}
他的顺序是从左到右. 最后的速度是19ms, 不如我的方法;
Problem Description
Assume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie. Each child i has a greed factor gi, which is the minimum size of a cookie that the child will be content with; and each cookie j has a size sj. If sj >= gi, we can assign the cookie j to the child i, and the child i will be content. Your goal is to maximize the number of your content children and output the maximum number.
Note:
You may assume the greed factor is always positive.
You cannot assign more than one cookie to one child.
Example 1:
Input: [1,2,3], [1,1]
Output: 1
Explanation: You have 3 children and 2 cookies. The greed factors of 3 children are 1, 2, 3.
And even though you have 2 cookies, since their size is both 1, you could only make the child whose greed factor is 1 content.
You need to output 1.
Example 2:
Input: [1,2], [1,2,3]
Output: 2
Explanation: You have 2 children and 3 cookies. The greed factors of 2 children are 1, 2.
You have 3 cookies and their sizes are big enough to gratify all of the children,
You need to output 2.
Difficulty:Easy
Category:Algorithms
Acceptance:47.02%
Contributors:
love_Fawn
Topics:
Greedy