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 cnt = 1;
for(int i = 1; i < points.size(); i++){
if(points[i][0] > points[i - 1][1]){
cnt++;
}else{
points[i][1] = min(points[i - 1][1], points[i][1]);
}
}
return cnt;
}
};
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) {
sort(intervals.begin(), intervals.end(), cmp);
int cnt = 1;
int rightEnd = intervals[0][1];
for(int i = 1; i < intervals.size(); i++){
if(intervals[i][0] >= rightEnd){
rightEnd = intervals[i][1];
cnt++;
}
}
return intervals.size() - cnt;
}
};
Leetcode 763 划分字母区间
class Solution {
public:
vector<int> partitionLabels(string s) {
int hash[27] = {0};
for(int i = 0; i < s.size(); i++){
hash[s[i] - 'a'] = i;
}
int left = 0;
int right = 0;
vector<int> res;
for(int i = 0; i < s.size(); i++){
right = max(right, hash[s[i] - 'a']);
if(i == right){
res.push_back(right - left + 1);
left = i + 1;
}
}
return res;
}
};