leetcode 分饼干 贪心算法python

描述
在这里插入图片描述

样例
样例1:

输入:[1,2,3], [1,1]
输出:1
说明:你有三个孩子和两块饼干,三个孩子的贪吃指数分别是1,2,3
虽然你有两块饼干,但是因为它们的大小都为1,你只能满足让贪吃指数为1的孩子满足,因此你应该输出1
样例2:

输入:[1,2], [1,2,3]
输出:2
说明:你有两个孩子和三块饼干,两个孩子的贪吃指数分别是1和2
这三块饼干的大小足以满足所有的孩子,因此你应该输出2

贪心算法求解

贪心算法原理:
贪心策略是指从问题的初始状态出发,通过若干次贪心选择得出最优值(或较优解)的一种解法。其实,从“贪心策略”一词可以看出,贪心策略总是做出在当前看来最优的选择。也就是说,贪心策略并不是从整体上 考虑问题,他所作的选择只是在某种意义上的局部最优解,而许多问题自身的特性决定了该题运用贪心策略可以得到最优解或者比较好的解。

特点:
1)贪心选择的性质:所谓贪心选择的性质是指应用同一规划,将原问题变为一个相似的但规模更小的子问题,而后做出的每一步选择都是当前看似最佳的选择。这种选择依赖于已做出的选择,但不依赖于未做出 的选择。从全局来看,运用贪心解决的问题在程序运行过程中无回溯过程。
2)局部最优解:局部最优解是贪心的数学描述。

本题思路:尽量用小的饼干满足小的胃口:

代码1

class Solution:
    """
    @param g: children's greed factor
    @param s: cookie's size
    @return: the maximum number
    """
    def findContentChildren(self, g, s):
        # Write your code here
        g.sort()#对小朋友胃口进行排序
        s.sort()#对饼干进行排序
        i=0#记录结果
        for cookie in s:#遍历饼干
           if i >=len(g):#如果结果长度大于等于小朋友长度,说明每个小朋友都进行了一次判断,退出
               break
           if g[i]<=cookie: #如果胃口小于饼干尺寸
               i+=1#换下一个小朋友胃口来判断
        return i
c=Solution()
d=c.findContentChildren([1,2], [1,2,3])
print(d)

结果:2

代码2

class Solution:
    def findContentChildren(self, children, cookies):
        children.sort()
        cookies.sort()

        res=0 #记录结果
        g=0#记录小朋友胃口
        s=0#记录饼干

        while g<len(children) and s<len(cookies):
            if children[g]<=cookies[s]:#如果当前小朋友胃口<=当前饼干尺寸
                s+=1 #饼干加1
                g+=1#小朋友加1
                res+=1#结果加1
            else: #
                s+=1 #饼干加1,换下一块饼干来和当前小朋友匹配
        return res

c=Solution()
d=c.findContentChildren([1,2], [1,2,3])
print(d)


结果:2

猜你喜欢

转载自blog.csdn.net/kobeyu652453/article/details/106786998
今日推荐