
贪心
Jelly_Believer
这个作者很懒,什么都没留下…
展开
-
leetcode738 单调递增的数字
局部最优:遇到s[i] < s[i-1],则令s[i-1]–,s[i] = ‘9’. 如32,就变成29;全局最优:得到小于等于N的最大单调递增的整数问题:遍历顺序,应该从后往前遍历,因为s[i-1]会–,从后往前遍历就总能保证s[i-1] >= s[i]了。记录从哪里开始开始统一变为9。比如1032的变化过程为 1032–> 1029 --> 0929–> 999(这里是从9开始往后全部变为9)...原创 2021-11-12 09:38:31 · 107 阅读 · 0 评论 -
leetcode56 合并区间
思路:按左边界排序,若相邻两个区间重叠(表现为intervals[i][0] <= end),则更新最大右边界end,这样就可以合并更多的区间了,整体最优:合并所有重叠的区间。class Solution {public: static bool cmp(const vector<int> &a, const vector<int> &b){ return a[0] < b[0]; } vector&l..原创 2021-11-09 19:28:08 · 3936 阅读 · 0 评论 -
leetcode 376摆动序列,最大子序列和,跳跃游戏
技巧:只需要统计摆动序列长度,故并不需要对原数组有什么修改若数组长度为二,则摆动长度为2。。则result初始为1(默认最右面有一个峰值),此时curDiff > 0 && preDiff <= 0,那么result++(计算了左面的峰值),最后得到的result就是2(峰值个数为2即摆动序列长度为2)class Solution {public: int wiggleMaxLength(vector<int>& nums) { .原创 2021-11-02 21:14:49 · 3262 阅读 · 0 评论 -
leetcode加油站, 分发糖果,根据身高重建队列,用最少数量的箭引爆气球(贪心)
暴力解法for循环适合模拟从头到尾的遍历,而while循环适合模拟环形遍历,要善于使用whileclass Solution {public: int canCompleteCircuit(vector<int>& gas, vector<int>& cost) { int curSum = 0; int totalSum = 0; int start = 0; for (int i = .原创 2021-09-14 22:26:35 · 116 阅读 · 0 评论