← 博客

贪心

灵神题单

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]

处理完当前最大值后,即可去掉最大值,思考现在的最大值

字符串贪心

字典序最小/最大

思维

分类讨论

3863. 将一个字符串排序的最小操作次数