leetcode.455.Assign Cookies

来源:互联网 发布:什么是js对象编程 编辑:程序博客网 时间:2024/06/01 18:18

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: 1Explanation: 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: 2Explanation: 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.

sln

通过简单分析,可以发现这道题用贪婪算法来实现的话,就是对于每个小孩,尽量找比他的g值大的s值列表中最小的s值。
那么我们首先对g和s两个列表进行升序排序,分别从头开始遍历g和s两个数组,对于每个g和s值,如果g大于s,则当前s无法满足当前g,s指向下一个值。如果g小于等于s,那么当前s是最适合当前g的值(因为s和g都已经排过序了),因此s和g都指向下一个值。这样下来,对于排序后的s和g,我们只需要进行一次遍历就可以找出结果。遍历的时间复杂度为O(n),而排序的复杂度为O(nlogn)。因此整个算法的复杂度为O(nlogn)。python实现如下:

class Solution(object):    def findContentChildren(self, g, s):        """        :type g: List[int]        :type s: List[int]        :rtype: int        """        if len(g) == 0 or len(s) == 0:            return 0        g = sorted(g)        s = sorted(s)        g_index = 0        s_index = 0        count = 0        while g_index < len(g) and s_index < len(s):            if g[g_index] <= s[s_index]:                g_index += 1                s_index += 1                count += 1            else:                s_index += 1        return count

提交上述算法后发现仅仅比75%+的提交快,然而快速浏览了下discussion却发现大家都是在说这种O(nlogn)的实现,所以暂时还没有进一步优化的思路。

0 0
原创粉丝点击