算法训练营day29 | {122.买卖股票的最佳时机II, 55.跳跃游戏, 45.跳跃游戏II, 1005.K次取反后最大化的数组和}
第八章贪心算法part02,贪心的思路,局部最优贪在哪里。
122. 买卖股票的最佳时机II
- 题目链接:122.买卖股票的最佳时机II
- 文档讲解:代码随想录–122.买卖股票的最佳时机II
- 视频讲解:贪心算法也能解决股票问题!LeetCode:122.买卖股票最佳时机II
- 状态:贪在哪里呢?想不到怎么贪。
1.1 解题分析
本题如果想到最终利润是可以分解的,那就容易了(只收集正利润,局部最优推出全局最优)。如何分解?
假设第0天买入,第3天卖出,那么利润为:prices[3] - prices[0],相当于 (price[3] - price[2]) + (price[2] - price[1]) + (price[1] - price[0]),此时就把利润分解为每天为单位的维度,不用从第0天到第3天整体去考虑。
▶
122. 买卖股票的最佳时机II1 | |
55. 跳跃游戏
- 题目链接:55. 跳跃游戏
- 文档讲解:代码随想录–55. 跳跃游戏
- 视频讲解:贪心算法,怎么跳跃不重要,关键在覆盖范围 | LeetCode:55.跳跃游戏
- 状态:关键在于覆盖范围,每次贪最远的覆盖范围。
2.1 解题分析
Jump Game 不是“从 cover 再跳”,而是“枚举所有能站到的位置 i,从 i 再跳”。
▶
55. 跳跃游戏1 | |
45. 跳跃游戏II
- 题目链接:45.跳跃游戏II
- 文档讲解:代码随想录–45.跳跃游戏II
- 视频讲解:贪心算法,最少跳几步还得看覆盖范围 | LeetCode: 45.跳跃游戏II
- 状态:和55.思路相似,贪心的思路是当前可覆盖范围内,尽可能多走,如果还没到终点,步数再加一。
3.1 解题分析
▶
45. 跳跃游戏II1 | |
1005. K次取反后最大化的数组和
- 题目链接:1005.K次取反后最大化的数组和
- 文档讲解:代码随想录–1005.K次取反后最大化的数组和
- 视频讲解:贪心算法,这不就是常识?还能叫贪心?LeetCode:1005.K次取反后最大化的数组和
- 状态:贪在先对最大的负数取反,如果没有负数,对0取反消耗次数,0也没有,对最小的一个正数取反。
4.1 解题分析
培养用贪心的思考方式(局部最优,全局最优)来解题。局部最优:让绝对值最大的负数变为正数。
- 注意第一遍写的时候,k还有剩并且是奇数的情况下,反转绝对值最小的数,因为一开始没有按照绝对值大小来排序,所以还得再排序一次。
▶
1005. K次取反后最大化的数组和1 | |
算法训练营day29 | {122.买卖股票的最佳时机II, 55.跳跃游戏, 45.跳跃游戏II, 1005.K次取反后最大化的数组和}
http://paopaotangzu.xyz/cn/day29_leetcode/