方法一:46. 合并区间基础上修改
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
vector<vector<int>> vec_vec_int;
intervals.push_back(newInterval);
sort(intervals.begin(), intervals.end());
int left = 0, right = 1;
int n = intervals.size();
if(n == 0)
return {};
while(right < n){
if(intervals[left][1] >= intervals[right][0]){
intervals[left][0] = min(intervals[left][0], intervals[right][0]);
intervals[left][1] = max(intervals[left][1], intervals[right][1]);
}
else{
vec_vec_int.push_back(intervals[left]);
left = right;
}
right++;
}
vec_vec_int.push_back(intervals[left]);
return vec_vec_int;
}
};
因为给定的数据不重叠,所以存在很多无用功,导致时间效率慢。
Accepted
156/156 cases passed (24 ms)
Your runtime beats 19.26 % of cpp submissions
Your memory usage beats 94.1 % of cpp submissions (16.5 MB)
方法二:时间上稍微快一点
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
vector<vector<int>> vec_vec_int;
int left = 0;
int n = intervals.size();
if(n == 0){
vec_vec_int.push_back(newInterval);
return vec_vec_int;
}
while(left < n){
if(intervals[left][0] <= newInterval[0] && intervals[left][1] >= newInterval[0]
|| newInterval[0] <= intervals[left][0] && newInterval[1] >= intervals[left][0]){
newInterval[0] = min(intervals[left][0], newInterval[0]);
newInterval[1] = max(intervals[left][1], newInterval[1]);
}
else if(intervals[left][0] < newInterval[0]){
vec_vec_int.push_back(intervals[left]);
}
else if(newInterval[1] < intervals[left][0]){
vec_vec_int.push_back(newInterval);
break;
}
if(left == n - 1){
vec_vec_int.push_back(newInterval);
}
left++;
}
while(left < n){
vec_vec_int.push_back(intervals[left]);
left++;
}
return vec_vec_int;
}
};
Accepted
156/156 cases passed (16 ms)
Your runtime beats 59.86 % of cpp submissions
Your memory usage beats 90.54 % of cpp submissions (16.5 MB)