435. 无重叠区间 - 力扣(Leetcode)
class Solution {
public:
static bool cmp(vector<int>& vec1, vector<int>& vec2) {
return vec1[0] < vec2[0];
}
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end(), cmp);
vector<vector<int>>::size_type pre = 0, curr = 0, result = 0;
while(curr < intervals.size()) {
while(curr < intervals.size() && intervals[pre][1] > intervals[curr][0]) {
if(intervals[pre][1] > intervals[curr][1]) pre = curr;
curr++;
}
pre = curr;
result++;
}
return intervals.size() - result;
}
};
763. 划分字母区间 - 力扣(Leetcode)
class Solution {
public:
vector<int> partitionLabels(string s) {
vector<int> letters(26, -1);
for(int i = 0; i < s.size(); i++) {
letters[s[i] - 'a'] = i;
}
int left = -1, right = 0;
vector<int> result;
for(int i = 0; i < s.length(); i++) {
right = right > letters[s[i] - 'a'] ? right : letters[s[i] - 'a'];
if(i == right) {
result.push_back(right - left);
left = right;
}
}
return result;
}
};
56. 合并区间 - 力扣(Leetcode)
class Solution {
public:
static bool cmp(const vector<int>& vec0, const vector<int>& vec1) {
return vec0[0] < vec1[0];
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if(intervals.size() == 1) return intervals;
sort(intervals.begin(), intervals.end());
vector<vector<int>> result;
vector<vector<int>>::size_type left = 0, right = 0;
int max_bound;
while(right < intervals.size()) {
max_bound = intervals[left][1];
while(right < intervals.size() && max_bound >= intervals[right][0]) {
max_bound = max(max_bound, intervals[right][1]);
right++;
}
result.push_back({intervals[left][0], max_bound});
left = right;
}
return result;
}
};