目录
435 无重叠区间
class Solution {
public:
static bool cmp(const vector<int>& a, const vector<int>& b){
if(a[0] == b[0]) return a[1] < b[1];
return a[0] < b[0];
}
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
int cur = 0;//指向当前上一个不重复的区间
int result = 0;
if(intervals.size() == 0) return 0;
if(intervals.size() == 1) return 0;
sort(intervals.begin(), intervals.end(), cmp);
cout << intervals[0][1] << endl;
for(int i = 1; i < intervals.size(); i++){
if(intervals[cur][1] <= intervals[i][0]){//说明不重复
cur = i;
}
else if(intervals[i][0] > intervals[cur][0] && intervals[i][1] < intervals[cur][1]){
cur = i;
result++;
}
else if(intervals[i][0] >= intervals[cur][0] && intervals[i][0] <= intervals[cur][1]){
result++;
}
}
return result;
}
};
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 left = 0, right = 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;//把左边界重新定义一下,+1才算出了之前的区域,进入新的区间
}
}
return result;
}
};
56 合并区间
class Solution {
public:
static bool cmp(const vector<int>& a, const vector<int>& b){
if(a[0] == b[0]) return a[1] < b[1];
return a[0] < b[0];
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
int right = 0;
vector<vector<int>> result;
if(intervals.size() == 0) return result;
if(intervals.size() == 1) return intervals;
sort(intervals.begin(), intervals.end(), cmp);
result.push_back(intervals[0]);//先把第一个数组插进去,方便比较
for(int i = 1; i < intervals.size(); i++){
//1 如果result数组里最后一个数组的右边界比当前数组的左边界小,就直接插进result
if(result[result.size()-1][1] < intervals[i][0]){
result.push_back(intervals[i]);
}else if(result[result.size()-1][0] <= intervals[i][0] && intervals[i][0] <= result[result.size()-1][1]){
//可以重叠,重新设置数组的右边界相当于扩大
result[result.size()-1][1] = max(result[result.size()-1][1], intervals[i][1]);
}
}
return result;
}
};