美文网首页
Leetcode-455Assign Cookies

Leetcode-455Assign Cookies

作者: LdpcII | 来源:发表于2018-03-17 22:24 被阅读0次

    455. Assign Cookies

    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.

    题解:

    分糖果,给出一些孩子对糖果的需求,存入g;糖果的大小,存入s;求糖果所能满足的孩子需求的最多的数量。
    考虑贪心的思想(选取当前最优的策略的算法),以Input: [3,1,2], [4,1]为例:孩子对糖果的需求分别为1,2,3;糖果大小为1,1;

    1. 分别对g和s中的元素进行排序,Input变为 [1,2,3], [1,4];
    2. 依次将g, s中的元素进行对比,让最小的糖果尽可能的满足需求小的孩子,这样当孩子或者糖果中的一个比较完成后,输出满足分配条件的孩子数量。

    My Solution(C/C++完整实现):

    #include <cstdio>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    class Solution {
    public:
        int findContentChildren(vector<int> &g, vector<int> &s) {  //需求因子g, 糖果大小s
            sort(g.begin(), g.end());
            sort(s.begin(), s.end());
            int child = 0;
            int cookie = 0;
            while (child < g.size() && cookie < s.size()) {
                if (g[child] <= s[cookie]) {
                    child += 1;
                }
                cookie += 1;
            }
            return child;
        }
    };
    
    int main() {
        Solution s;
        vector<int> children;
        vector<int> cookie;
        children.push_back(1);
        children.push_back(2);
        children.push_back(3);
        cookie.push_back(1);
        cookie.push_back(1);
        printf("%d\n", s.findContentChildren(children, cookie));
        return 0;
    }
    

    结果:

    1
    
    

    My Solution(Python):

    class Solution:
        def findContentChildren(self, g, s):
            """
            :type g: List[int]
            :type s: List[int]
            :rtype: int
            """
            g.sort()
            s.sort()
            child = cookie = result = 0
            while cookie < len(s) and child < len(g):
                if g[child] <= s[cookie]:
                    result += 1
                    child += 1
                cookie += 1
            return result
    

    Reference:

    class Solution:
        def findContentChildren(self, g, s):
            """
            :type g: List[int]
            :type s: List[int]
            :rtype: int
            """
            res = 0
            heapq.heapify(g)
            s.sort()
            for num in s:
                if not g:
                    break
                elif g[0] <= num:
                    res += 1
                    heapq.heappop(g)
            return res
    

    相关文章

      网友评论

          本文标题:Leetcode-455Assign Cookies

          本文链接:https://www.haomeiwen.com/subject/mhdsqftx.html