代码随想录算法训练营day26|455.分发饼干 376. 摆动序列 53. 最大子序和

学习资料:https://programmercarl.com/贪心算法理论基础.html#算法公开课

贪心算法Part1
求局部最优解,最终达到全局最优

455.分发饼干(大胃口吃大饼干)

点击查看代码
class Solution(object):
    def findContentChildren(self, g, s):
        """
        :type g: List[int]
        :type s: List[int]
        :rtype: int
        """
        # 贪心算法:每次局部最优(大胃口吃大饼干),使得最终全局最优
        # 先对两个数组排序,然后都从大到小遍历
        g.sort()
        s.sort()
        max_num = 0
        j_cooki = len(s)-1
        # 先遍历胃口
        for i in range(len(g)-1, -1, -1):
            # 要求胃口大于等于饼干;因为下面要减一,所以这里要非负数,保证最多把饼干遍历完,如果还没有结果也要终止
            if j_cooki>=0 and g[i]<=s[j_cooki]:
                max_num += 1
                j_cooki -= 1   # 再开始遍历饼干
        return max_num
        

376.摆动序列(有好多情况要考虑;主要是拐点处摆动)

点击查看代码
class Solution:
    def wiggleMaxLength(self, nums: List[int]) -> int:
        """
        贪心法,3种摆动类型:升-降-升-降,升-平-降,单调(升-平-升,降-平-降)
        摆动:此数与前数的差值,此数与后数的差值,两差值一正一负最佳,或者有一个为0
        """
        prediff=0   # 设置初始的与前值的差为0,相当于在第一个前面加一个一样的数
        maxlength = 1   # 默认最后一个数必为摆动,遍历时就在前一数停止,保证i+1始终存在
        for i in range(len(nums)-1):
            curdiff = nums[i+1]-nums[i]  # 该数与后一数的差值
            if (prediff<=0 and curdiff>0) or (prediff>=0 and curdiff<0): # 等于0是考虑平
                maxlength += 1  
                prediff = curdiff  # 只在摆动处再更新,避免类型3的平处多了个摆动
        return maxlength
        

53.最大子序和(贪心:当前一段和为负数,就丢弃这一段,从下一段重新开始加和;整个过程中只要和比前一次大就要更新一次,直到遍历完)

点击查看代码
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        # 贪心思路:先设置目标值为无穷小,开始遍历数组,
        # 1 只要和大于预设目标值,就替换为目标值,
        # 2 当和为负,说明此时的和对后续数字有拖累,就甩掉,重新从下一个数开始从0求和,若和大于目标值,也是与1一致,将其替换为目标值
        result = float('-inf')
        count = 0
        for i in range(len(nums)):
            count += nums[i]
            if count>result:
                result = count
            if count<0:
                count = 0
        return result
        

PS:补了昨天的,昨天去听宣讲没心情学,今天的趁周末补习
昨天看到一个小众公司,希望有机会冲一冲,今天又是考试的一天,手都写麻了,累,英语是真菜,话都说不清楚
阴转多云

posted @   Tristan241001  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示