贪心
300. 最长递增子序列
定义 g[i] 表示长为 i+1 的上升子序列的末尾元素的最小值。
反证法可证明:g是一个严格递增的数组
659. 分割数组为连续子序列
tail[i]用来表示,以i结尾的子序列个数。这样在遇到i+1时,就可以放进去了。
如果放不了,则开辟一个新序列,并检查 cnt[i+1]>0 and cnt[i+2]>2, 如果不满足,返回 False。
2422. 使用合并操作将数组转换为回文序列
尽量保持左指针指向的,和右指针的,是一样的. 如果哪边更小,就试图合并哪边。
到最后l==r时,数组只有1个数字,那就是回文序列。
贪心策略
从最小/最大开始贪心
3440. 重新安排会议得到最多空余时间 II
从最左/最右开始贪心
2571. 将整数减少到零需要的最少操作数
区间贪心
不相交贪心
435. 无重叠区间
每次选右边端点最小的区间加入答案
区间覆盖
45. 跳跃游戏 II
得用贪心做。遍历每个位置(不是跳跃),更新 furthest,代表从那个位置能跳到的最远位置。
#如果当前遍历到的i==curEnd,说明必须跳跃一次,curEnd 被更新为furthest,意思是可以跳到(curEnd, furthest]之中的任意一个位置。
注意不枚举终点
构造
1317. 将整数转换为两个无零整数的和
从低位到高位,如果x>=2,则一个数被赋上low(x/2),另一个high(x//2)
如果x<=1,则向高位借一位
循环条件为while n>1,因为n>=2时才有必要分,n<=1的话也没办法借位了
969. 煎饼排序
输入:[3,2,4,1]
思考怎么把最大值放到尾部?设最大值的index为k,则反转nums[0]到nums[k]这一段,接着,再翻转整个数组,即可
这一步得到[1,3,2,4]
处理完当前最大值后,即可去掉最大值,思考现在的最大值