57.插入区间
给出一个无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
- 先确定插入位置,然后再考虑合并问题,究极恐怖枚举。不过效率还不错
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
if(intervals.size() == 0) return {newInterval};
vector<vector<int> > res;
int lpos=0,rpos=0;
for(int i = 0;i < intervals.size();i++){
if(intervals[i][0] < newInterval[0]) lpos++;
if(intervals[i][1] < newInterval[1]) rpos++;
}
if(lpos > rpos){
return intervals;
}
if(rpos == 0){
if(intervals[rpos][0] > newInterval[1]){
res.push_back(newInterval);
for(int i = 0;i < intervals.size();i++){
res.push_back(intervals[i]);
}
}
else{
res.push_back({newInterval[0],intervals[0][1]});
for(int i = 1;i < intervals.size();i++){
res.push_back(intervals[i]);
}
}
}
else if(lpos == 0){
if(rpos == intervals.size()){
res.push_back(newInterval);
}
else if(intervals[rpos][0] > newInterval[1]){
res.push_back(newInterval);
for(int i = rpos;i < intervals.size();i++){
res.push_back(intervals[i]);
}
}
else if(intervals[rpos][0] <= newInterval[1]){
res.push_back({newInterval[0],intervals[rpos][1]});
for(int i = rpos+1;i < intervals.size();i++){
res.push_back(intervals[i]);
}
}
}
else{
if(intervals[lpos-1][1] >= newInterval[0] && rpos == intervals.size()){
for(int i = 0;i < lpos-1;i++){
res.push_back(intervals[i]);
}
res.push_back({intervals[lpos-1][0],newInterval[1]});
}
else if(intervals[lpos-1][1] < newInterval[0] && rpos == intervals.size()){
for(int i = 0;i < lpos;i++){
res.push_back(intervals[i]);
}
res.push_back(newInterval);
}
else if(intervals[lpos-1][1] >= newInterval[0] && intervals[rpos][0] <= newInterval[1]){
for(int i = 0;i < lpos-1;i++){
res.push_back(intervals[i]);
}
res.push_back({intervals[lpos-1][0],intervals[rpos][1]});
for(int i = rpos+1;i < intervals.size();i++){
res.push_back(intervals[i]);
}
}
else if(intervals[lpos-1][1] >= newInterval[0] && intervals[rpos][0] > newInterval[1]){
for(int i = 0;i < lpos-1;i++){
res.push_back(intervals[i]);
}
res.push_back({intervals[lpos-1][0],newInterval[1]});
for(int i = rpos;i < intervals.size();i++){
res.push_back(intervals[i]);
}
}
else if(intervals[lpos-1][1] < newInterval[0] && intervals[rpos][0] > newInterval[1]){
for(int i = 0;i <= lpos-1;i++){
res.push_back(intervals[i]);
}
res.push_back({newInterval[0],newInterval[1]});
for(int i = rpos;i < intervals.size();i++){
res.push_back(intervals[i]);
}
}
else if(intervals[lpos-1][1] < newInterval[0] && intervals[rpos][0] <= newInterval[1]){
for(int i = 0;i <= lpos-1;i++){
res.push_back(intervals[i]);
}
res.push_back({newInterval[0],intervals[rpos][1]});
for(int i = rpos+1;i < intervals.size();i++){
res.push_back(intervals[i]);
}
}
}
return res;
}
};
通过时间: