class Solution {
public:
static bool cmp (const vector<int>& L, const vector<int>& R){
return L[1] < R[1];
}
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
if (intervals.size() < 2){
return 0;
}
int remove_count = 0;
sort(intervals.begin(), intervals.end(), cmp);
int end = intervals[0][1];
for (int i = 1; i < intervals.size(); i++){
if (intervals[i][0] < end){
remove_count++;
}else {
end = intervals[i][1];
}
}
return remove_count;
}
};
class Solution {
public:
vector<int> partitionLabels(string s) {
vector<int> ans;
int hash[26] ={0};
for (int i = 0; i < s.size(); i++){
hash[s[i] - 'a'] = i;
}
int left = 0;
int right = 0;
for (int i = 0; i < s.size(); i++){
//找到字符最远边界
right = max(right, hash[s[i] - 'a']);
if(i == right){
ans.push_back(right - left + 1);
left = right + 1;
}
}
return ans;
}
};
1.自己实现
class Solution {
public:
static bool cmp (const vector<int>& L, const vector<int>& R){
return L[0] < R[0];
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if (intervals.size() < 2){
return intervals;
}
vector<vector<int>> ans;
sort(intervals.begin(), intervals.end(), cmp);
int start = intervals[0][0];
int end = intervals[0][1];
for (int i = 1; i < intervals.size(); i++){
if (intervals[i][0] <= end){
end = max(end, intervals[i][1]);
}else {
ans.emplace_back(vector({start, end}));
start = intervals[i][0];
end = intervals[i][1];
}
}
ans.emplace_back(vector({start, end}));
return ans;
}
};
2.Carl版本
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if (intervals.size() < 2) {
return intervals;
}
sort(intervals.begin(), intervals.end(), [](const vector<int>& L, const vector<int>& R){return L[0] < R[0];});
vector<vector<int>> ans;
ans.emplace_back(intervals[0]);
for (int i = 1; i < intervals.size(); i++){
if (intervals[i][0] <= ans.back()[1]){
ans.back()[1] = max(ans.back()[1], intervals[i][1]);
}else {
ans.emplace_back(intervals[i]);
}
}
return ans;
}
};