![](https://img-blog.csdnimg.cn/f990e260b01947f8b0c3508143b7b9aa.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
贪心算法
文章平均质量分 82
贪心算法
呵呵哒( ̄▽ ̄)"
喜欢分享学习笔记,并不一定是正确的,阶段性的学习成果做一下记录,欢迎一起交流讨论,也希望有错误的地方可以向我提出,我会虚心接受并纠正
展开
-
leetCode 674. 最长连续递增序列 动态规划 / 贪心策略
当遇到nums[i] > nums[i - 1]的情况,count++,否则count 为 1,记录下count的最大值即可。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。,那么以 i 为结尾的连续递增的子序列长度 一定等于 以i - 1为结尾的连续递增的子序列长度 + 1。为结尾的连续递增的子序列长度最少也应该是1,即就是nums[i]这一个元素。dp[i]:以下标i为结尾的连续递增的子序列长度为dp[i]最长连续递增序列是 [2], 长度为1。原创 2023-10-07 22:23:08 · 296 阅读 · 0 评论 -
leetCode 300.最长递增子序列 (贪心 + 二分 ) + 图解 + 优化 + 拓展
子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序”dp[i]表示 i 之前包括 i 的以 nums[i] 结尾的最长递增子序列的长度。这里就用反证法来证明,如果 g 不是严格递增的,比如说 g = [1,6,6] 那么最后的这个 6 肯定会对应一个长为 3 的,末尾为 6 的上升子序列,那第二个数是小于等于5的,而这就和第一个6矛盾了,它表示第二个数最小是6。所以通过反证法,我们可以得出 g 一定是一个严格递增的序列,知道 g 是严格递增的,就可以得出后面的结论了。原创 2023-10-07 19:33:02 · 681 阅读 · 0 评论 -
leetCode 45.跳跃游戏 II 贪心算法
如果移动下标达到了当前这一步的最大覆盖最远距离了,还没有到终点的话,那么就必须再走一步来增加覆盖范围,直到覆盖范围覆盖了终点。跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳3步到达数组的最后一个位置。,这个范围内最少步数一定可以跳到,不用管具体是怎么跳的,不纠结于一步究竟跳一个单位还是两个单位。需要统计两个覆盖范围,当前这一步的最大覆盖和下一步最大覆盖!换句话说,如果你在 nums[i]真正解题的时候,要从覆盖范围出发,不管怎么跳。每个元素 nums[i]原创 2023-10-03 20:02:36 · 678 阅读 · 0 评论 -
leetCode 121. 买卖股票的最佳时机 贪心算法
在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。因为股票就买卖一次,那么贪心的想法很自然就是取最左最小值,取最右最大值,那么得到的差值就是最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回。设计一个算法来计算你所能获取的最大利润。在这种情况下, 没有交易完成, 所以最大利润为 0。买入这只股票,并选择在。原创 2023-10-03 12:04:03 · 583 阅读 · 0 评论 -
leetCode 55.跳跃游戏 贪心算法
其实可以换一个维度,不去纠结于在数组中得到一个元素往后具体去跳几步,我们只看覆盖范围。也就是说,在一开始站在起始位置,往后的覆盖范围就是覆盖了两步,然后站在元素3这个位置,往后的覆盖范围就是三步的覆盖范围。那么最终就把终点给覆盖了。示例1中,若站在元素3的位置,我究竟是跳一步还是跳两步,还是跳三步呢?只要在覆盖范围内,那任何一个元素的下标位置,都可以跳到,别管我是跳几步,别管我是怎么跳的,我就是可以跳过来。可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。原创 2023-10-03 09:39:33 · 405 阅读 · 0 评论 -
leetCode 122.买卖股票的最佳时机 II 贪心算法
先举个例子,例如在 第 1 天(股票价格 = 1)的时候买入,在 第 3 天(股票价格 = 10)的时候卖出,这笔交易所能获得利润 = 10 - 1 = 9。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。然后从第4天买入,第5天卖出,把这个利润也给收获了。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。原创 2023-10-02 22:43:33 · 219 阅读 · 0 评论 -
leetCode 53.最大子数和 图解 + 贪心算法/动态规划+优化
由于前面已经计算过包括i = 1之前的最大连续子序列和,并且将值保存在 dp[1] 里,所以count = dp[1] + (-3) = 1 + (-3) = -2,接着在count 和 nums[2] = -3中选取最大值,即。发现 count < nums[3],这时候取最大值就可以让dp[3] = nums[3],表示接下来,可以调整起点,让 i = 3 为起点。count = (-2) + 1 = -1,在count 和 nums[1] = 1中选取最大值,即。贪心算法的巧妙需要慢慢体会!原创 2023-10-02 21:14:24 · 1010 阅读 · 0 评论 -
leetCode 376.摆动序列 贪心算法
解决方案就是:prediff只记录当摆动出现的时候,下一个坡的初始坡度,然后prediff就不用去改变了,直到遇到下一个摆动的时候,又改变坡的方向了,prediff可以再去改变,这样就可以绕过这种平坡的情况。,prediff是有变化的,因为在 1 那里默认它有个平坡(情况二),然后在有变化的时候,prediff就记录一下这个坡度的初始值,也就是初始的坡度的方向。其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8)。原创 2023-10-01 18:25:58 · 474 阅读 · 0 评论 -
leetCode 455.分发饼干 贪心算法
你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。然后从后向前遍历小孩数组,用大饼干优先满足胃口大的,并统计满足小孩数量。你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。你拥有的饼干数量和尺寸都足以让所有孩子满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。,这是能让孩子们满足胃口的饼干的最小尺寸;原创 2023-10-01 15:01:18 · 1120 阅读 · 0 评论 -
leetCode 968.监控二叉树(利用状态转移+贪心)
因为头结点放不放摄像头只能省下一个摄像头,叶子节点放不放摄像头省下来了的摄像头数量是指数级别的。局部最优:让叶子节点的父节点安摄像头,所用摄像头最少。整体最优:摄像头所用最少!摄像头可以覆盖上中下三层,若把摄像头放在叶子节点上,就浪费一层的覆盖。因此把摄像头放在叶子节点的父节点位置,才能充分利用摄像头的覆盖范围。由于本题状态转移并没有择优的过程,只是单纯的状态转移!给定一个二叉树,我们在树的节点上安装摄像头。重要线索->题目示例中的摄像头都没有放在叶子节点上!计算监控树的所有节点所需的最小摄像头数量。原创 2023-09-25 16:42:08 · 162 阅读 · 0 评论