双指针法
- 思路:
- 用待插入区间左右边界初始化双指针 left 和 right;
- 遍历待归并区间:
- 如果元素整体边界在 [left, right] 左侧(item[1] < left),则将给元素插入结果数组中;
- 如果元素整体边界在 [left, right] 右侧 (item[0] > right),则将 {left, right} 区间插入结果数组;
- 如果在 [left, right] 之间,更新 left 和 right (左者更左,右者更右);
- 注意遍历完之后 {left, right} 是否插入结果数组中;
class Solution {
public:vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {int left = newInterval[0];int right = newInterval[1];bool mark = false;std::vector<std::vector<int>> result;for (const auto & item: intervals) {if (item[0] > right) {if (!mark) {result.push_back({left, right});mark = true;}result.push_back(item);} else if (item[1] < left) {result.push_back(item);} else {left = std::min(left, item[0]);right = std::max(right, item[1]);}}if (!mark) {result.push_back({left, right});}return result;}
};