> 文章列表 > LeetCode_101

LeetCode_101

LeetCode_101

内容提要

 贪心算法

保证每次操作都属局部最优的,从而使得最后的结果是全局最优

全局结果是局部结果的简单求和,且局部结果互不相干

分配问题

分发饼干  455  简单

分发糖果  135  困难

先从左往右遍历一遍,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的 糖果数加 1;再从右往左遍历一遍,如果左边孩子的评分比右边的高,且左边孩子当前的糖果数 不大于右边孩子的糖果数,则左边孩子的糖果数更新为右边孩子的糖果数加 1

 区间问题

Non-overlapping Intervals  435 中等

 求最少的移除区间个数,等价于尽量多保留不重叠的区间。在选择要保留区间时,区间的结 尾十分重要:选择的区间结尾越小,余留给其它区间的空间就越大,就越能保留更多的区间。因 此,我们采取的贪心策略为,优先保留结尾小且不相交的区间。

按区间的结尾排序 写法

 解释:

关于vector<int>和vector<vector<int>>的sort函数中的compare函数自定义写法_vector<vector<int>> sort_Shallow_Carl的博客-CSDN博客

更一般的写法:

记得加上前面的stastic 

can place flowers 605 简单

452  minimum number of arrows to burst balloon 中等

763 partition labels 中等

 进阶难度

406  queue reconstruction by height 中等

class Solution {
public:vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort(people.begin(),people.end(),[](const vector<int>& u,const vector<int>& v){return u[0] > v[0] || (u[0] == v[0] && u[1] < v[1]);});vector<vector<int>> ans;for(const vector<int>& person: people) {ans.insert(ans.begin()+person[1],person);}return ans;}
};

665  non-decreasing array 中等

class Solution {
public:bool checkPossibility(vector<int> &nums) {int n = nums.size(), cnt = 0;for (int i = 0; i < n - 1; ++i) {int x = nums[i], y = nums[i + 1];if (x > y) {cnt++;if (cnt > 1) {return false;}if (i > 0 && y < nums[i - 1]) {nums[i + 1] = x;}}}return true;}
};

双指针