首页 > 编程语言 >[代码随想录]Day27-贪心算法part01

[代码随想录]Day27-贪心算法part01

时间:2023-08-25 14:45:09浏览次数:57  
标签:return nums part01 res Day27 随想录 lens int sum

题目:455. 分发饼干

思路:

贪心,思路是尽量先给胃口值小的分,饼干也是从小的开始分:

  1. 如果饼干满足了胃口值,结果+1换下一个人,下一个饼干
  2. 如果饼干满足不了胃口值,换下一个饼干(满足不了胃口值小的一定满足不了大的)

代码:

func findContentChildren(g []int, s []int) int {
    res := 0
    sort.Ints(g)
    sort.Ints(s)
    leng, lens := len(g), len(s)
    for i, j :=0, 0; i < lens&& j < leng; i++ {
        if s[i] >= g[j] {
            j++
            res++
        }
    }
    return res
}

参考:

代码随想录

题目:376. 摆动序列

思路:

大小转换成折线,要的就是起伏,也就是说找三个数,如果是单调的就删除中间多余的。
image.png

代码:

func wiggleMaxLength(nums []int) int {
    lens := len(nums)
    if lens < 2 {
        return lens
    }
    res := 1
    pre := nums[1] - nums[0]
    if pre != 0 {
        res = 2
    }
    for i := 2; i < lens; i++ {
        now := nums[i] - nums[i-1] 
        if now > 0 && pre <= 0 || now < 0 && pre >= 0 { //
            res ++
            pre = now
        } 
    }
    return res
}

参考:

代码随想录

题目:53. 最大子序和

思路:

以前就做过的题,因为是需要连续,就直接遍历就可以了:

  1. 首先sum加上当前的数,然后判断一次max
  2. 如果当前的sum小于0,直接把当前舍弃掉,sum = 0,因为这一段范围对后面带来的只有负面影响

代码:

func maxSubArray(nums []int) int {
    res, sum := math.MinInt32, 0
    for _, x := range nums {
        sum += x
        res = max(sum, res)
        if sum < 0 {
            sum = 0 
            continue
        }  
    }
    return res
}

func max(a,b int) int {
    if a > b {
        return a
    }
    return b
}

参考:

代码随想录

标签:return,nums,part01,res,Day27,随想录,lens,int,sum
From: https://www.cnblogs.com/wtcsky/p/17656026.html

相关文章

  • 代码随想录第二天|977.有序数组的平方;209.长度最小的子数组;59.螺旋矩阵II,总结
    今天的这三道题每道题对我来说都不简单,有序数组的平方和长度最小的子数组这两道题还能用暴力求解,螺旋矩阵看着简单却没有思路,磨了半小时还是决定直接看讲解有序数组平方和用的双指针的思想,代码如下:1classSolution{2public:3vector<int>sortedSquares(vector<int......
  • [代码随想录]Day26-回溯算法part06
    题目:332.重新安排行程思路:其实这里已经是图的部分了,回溯应该也可以。Hierholzer算法解决欧拉问题代码:funcfindItinerary(tickets[][]string)[]string{var(m=map[string][]string{}res[]string)for_,ticket:=rangeticket......
  • 代码随想录第一天|704.二分查找、27.移除元素
    二分查找对数组的要求有两点:有序无重复元素,若有重复元素则返回的元素下标不唯一边界条件是while(left<=right)代码其实是很好理解的点击查看代码classSolution{public:intsearch(vector<int>&nums,inttarget){intlength=nums.size();......
  • [代码随想录]Day25-回溯算法part05
    题目:491.递增子序列思路:核心问题——同层去重,这一题不能够重新排序因此不可以用i>index&&nums[i]==nums[i-1]来去重,而是每一层开一个map来判断该数是否出现过代码:var(res[][]intpath[]int)funcfindSubsequences(nums[]int)[][]int{res=make(......
  • day14 - 二叉树part01
    144. 二叉树的前序遍历详解/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullp......
  • Vue学习笔记:Pinia Part01
    介绍Pinia是Vue的专属状态管理库,它允许你跨组件或页面共享状态。如果你熟悉组合式API的话,你可能会认为可以通过一行简单的 exportconststate=reactive({}) 来共享一个全局状态。对于单页应用来说确实可以,但如果应用在服务器端渲染,这可能会使你的应用暴露出一些安全漏洞......
  • [代码随想录]Day24-回溯算法part04
    题目:93.复原IP地址思路:函数参数:参数就一个stirng,path先收集ip地址的四个部分,最后存入res中时拼接成一个string,因此path和res都是[]string类型终止条件:当path有了ip的四个部分就终止;当然只有完全的把字符串遍历了才会存入res单层逻辑:先取1-3位,判断是不是0-255内的数并且没......
  • 代码随想录算法训练营第二十一天| 530.二叉搜索树的最小绝对差 501.二叉搜索树中的
     530.二叉搜索树的最小绝对差   卡哥建议:需要领悟一下二叉树遍历上双指针操作,优先掌握递归   题目链接/文章讲解:https://programmercarl.com/0530.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E7%BB%9D%E5%AF%B9%E5%B7%AE.html ......
  • 代码随想录算法训练营第二十天| 654.最大二叉树 617.合并二叉树 700.二叉搜索树
      654.最大二叉树    卡哥建议:又是构造二叉树,昨天大家刚刚做完 中序后序确定二叉树,今天做这个 应该会容易一些, 先看视频,好好体会一下 为什么构造二叉树都是 前序遍历    题目链接/文章讲解:https://programmercarl.com/0654.%E6%9C%80%E5%A4%A7%E4%BA%8C%E5......
  • [代码随想录]Day22-回溯算法part02
    题目:216.组合总和III思路:多加一个记录和的参数,还有一个起始位置的参数(不重复就得加)结束条件是个数到了k:如果此时sum==n那就说明答案正确如果此时sum!=n那就直接返回剪枝的话:如果之后的和大于n那就没必要继续遍历了代码:varres[][]int//答案varpath[]int......