452. 用最少数量的箭引爆气球
文档讲解:代码随想录.用最少数量的箭引爆气球
视频讲解:贪心算法,判断重叠区间问题 | LeetCode:452.用最少数量的箭引爆气球
状态:已完成
代码实现
class Solution {
public:static bool cmp(vector<int> a, vector<int> b) { return a[0] < b[0]; }int findMinArrowShots(vector<vector<int>>& points) {if (points.size() == 0)return 0;sort(points.begin(), points.end(), cmp); // 根据第一个参数的大小进行排序int result = 1; // points 不为空至少需要一支箭for (int i = 1; i < points.size(); i++) {if (points[i][0] > points[i - 1][1]) {result++;} else {points[i][1] =min(points[i][1], points[i - 1][1]); // 保留最小的右部边界}}return result;}
};
心得体会
- 针对重叠区域,首先应该进行排序,然后按照一定的原则进行过滤
435. 无重叠区间
文档讲解:代码随想录.无重叠区间
视频讲解:贪心算法,依然是判断重叠区间 | LeetCode:435.无重叠区间
状态:已完成
代码实现
class Solution {
public:static bool cmp(vector<int> a, vector<int> b) { return a[1] < b[1]; }int eraseOverlapIntervals(vector<vector<int>>& intervals) {if (intervals.size() == 0)return 0;sort(intervals.begin(), intervals.end(), cmp);int count = 1;// 记录非交叉区间的个数int end = intervals[0][1];for (int i = 0; i < intervals.size(); i++) {if (end <= intervals[i][0]) {//右边界终点大于左边界end = intervals[i][1];count++;}}return intervals.size() - count;}
};
心得体会
- 需要注意记录非较叉点的起始位置为1,并且在进行边界更新时的判断依据
763.划分字母区间
文档讲解:代码随想录.划分字母区间
视频讲解:贪心算法,寻找最远的出现位置! LeetCode:763.划分字母区间
状态:已完成
代码实现
class Solution {
public:vector<int> partitionLabels(string s) {int hash[27] = {};for (int i = 0; i < s.size(); i++) {hash[s[i] - 'a'] = i; // 跟新每个字符出现的最大位置}//vector<int> result;int right = 0;int left = 0;for (int i = 0; i < s.size(); i++) {right = max(right, hash[s[i] - 'a']);if (i == right) {result.push_back(right - left + 1);left = right + 1;}}return result;}
};
心得体会
- 首先是如何得到右侧的最大出现位置
- 其次是确定何时分割一个字符串