难度:中等。
标签:排序,数组。
先找到 n e w I n t e r v a l newInterval newInterval在 i n t e r v a l s intervals intervals中的位置,插入后按照上一题的方法进行合并。
注意使用二分法查找数组中比x大的位置索引的方法!!
正确解法:
class Solution {
int findLoction(vector<vector<int>> intervals, int num){
int left = 0, right = intervals.size() - 1, ans = intervals.size();
while(left <= right){
int mid = (left + right) / 2;
if(intervals[mid][0] > num){
right = mid - 1;
ans = mid;
}
else{
left = mid + 1;
}
}
return ans;
}
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
int n = intervals.size();
int loc = findLoction(intervals, newInterval[0]);
intervals.insert(intervals.begin() + loc, newInterval);
n++;
vector<vector<int>> result;
for(int i = 0; i < n; i++){
int left = intervals[i][0], right = intervals[i][1];
int j = i + 1;
for(; j < n; j++){
if(intervals[j][0] <= right){
right = max(right, intervals[j][1]);
}
else break;
}
result.push_back({left, right});
i = j - 1;
}
return result;
}
};
结果: