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

results matching ""

    No results matching ""