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

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

时间:2024-10-26 20:42:56浏览次数:1  
标签:count 饼干 nums int day26 随想录 455 摆动 贪心

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

标签:count,饼干,nums,int,day26,随想录,455,摆动,贪心
From: https://www.cnblogs.com/tristan241001/p/18504477

相关文章

  • 代码随想录算法训练营第七天|LeetCode 344.反转字符串、LeetCode 541.反转字符串Ⅱ、
    LeetCode 344.反转字符串题目链接:LeetCode344.反转字符串文章链接:代码随想录题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。示......
  • 代码随想录刷题学习日记
    仅为个人记录复盘学习历程,解题思路来自代码随想录代码随想录刷题笔记总结网址:代码随想录二叉树的统一迭代法二叉树的统一迭代指的是二叉树的前序遍历,中序遍历,后序遍历使用迭代法实现时,在方法和形式上较为统一的迭代方法。二叉树的前序遍历,中序遍历,后序遍历之所以无法统一是......
  • 代码随想录算法训练营第24天(补第13天)|226.翻转二叉树, 101. 对称二叉树,104.二叉树的最
    226.翻转二叉树文章链接:https://programmercarl.com/0226.翻转二叉树.html#算法公开课题目链接:https://leetcode.cn/problems/invert-binary-tree/description/迭代法:这里使用了前序遍历来交换左右孩子节点classSolution{public:TreeNode*invertTree(TreeNode*r......
  • [题解]P4552 [Poetize6] IncDec Sequence
    P4552[Poetize6]IncDecSequence我们对\(a\)做差分,得到数组\(b\)。\(a\)的区间修改,等价于选定\(i,j\in[1,n+1]\),令\(b[i]\leftarrow(b[i]+1),b[j]\leftarrow(b[j]-1)\),我们的目标是让\(b[2\simn]\)全为\(0\)。记\(x,y\)分别表示\(b[2\simn]\)中正数之和、负数的绝对值之和......
  • 代码随想录算法训练营day25| 491.递增子序列 46.全排列 47.全排列2
    学习资料:https://programmercarl.com/0491.递增子序列.html#算法公开课排列与组合的区别,不用startIndex,而每个树层都从0开始,但是要跳过已经用过的数(用used判断)学习记录:491.递增子序列(添加一个数组used(hash表),来保持数组每个位置上的数的使用情况,没用过为0,用过变成1)点击查看代......
  • 代码随想录算法训练营第24天(补第12天)| 递归遍历,迭代遍历,统一迭代
    前置知识二叉树的定义:structBNode{intval;BNode*lchild;BNode*rchild;BNode():lchild(NULL),rchild(NULL){}BNode(intval){val=val;lchild=rchild=NULL;}};递归遍历文章链接:https://programmercarl.com/二叉树的递归遍历.html#思路题目......
  • 代码随想录算法训练营第九天|leetcode151.翻转字符串里的单词、卡码网55.右旋字符串
    1leetcode151.翻转字符串里的单词题目链接:151.反转字符串中的单词-力扣(LeetCode)文章链接:代码随想录视频链接:字符串复杂操作拿捏了!|LeetCode:151.翻转字符串里的单词_哔哩哔哩_bilibili自己的思路:直接将空格去掉,然后分割字符串为列表,在列表中进行翻转,不在字符串内部操作,......
  • 代码随想录算法训练营第二十四天|Day24 回溯算法
    93.复原IP地址题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/思路char**result;intresultTop;intsegments[3];intisValid(char*s,intstart,intend){......
  • 代码随想录算法训练营 | 岛屿数量 深搜,岛屿数量 广搜,岛屿的最大面积
    岛屿数量深搜题目链接:岛屿数量深搜文档讲解︰代码随想录(programmercarl.com)日期:2024-10-23想法:Java代码如下:importjava.util.Scanner;publicclassMain{publicstaticint[][]dir={{0,1},{1,0},{-1,0},{0,-1}};publicstaticvoiddfs(boolean[][]v......
  • 【代码随想录Day50】图论Part02
    岛屿数量深搜题目链接/文章讲解:代码随想录classSolution{//计算网格中岛屿的数量publicintnumIslands(char[][]grid){intsum=0;//初始化岛屿数量为0//遍历整个网格for(inti=0;i<grid.length;i++){......