Skip to content

[LeetCode] 57. 插入区间 #99

@Animenzzzz

Description

@Animenzzzz

题目描述:

给出一个无重叠的 ,按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

示例 1:

输入: intervals = [[1,3],[6,9]], newInterval = [2,5]
输出: [[1,5],[6,9]]

示例 2:

输入: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出: [[1,2],[3,10],[12,16]]
解释: 这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。

解题思路:之前自己写的太多控制条件,一直都是解答错误。。看了网上的,解题思路清晰很多。分三部分,
1.首先new的左边界大于当前的区间右边界的,此区间直接加进结果
2.若new的右边界大于等于当前区间左边界,说明有包含关系,记得此时更新好new区间来进行下一次比较
3.经过上述两步,把剩下的区间直接加进结果

C++解题:

class Solution {
public:
    vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
        vector<vector<int>> res;
        int cur = 0;
        while (cur < intervals.size() && newInterval[0] > intervals[cur][1])
        {
            res.push_back(intervals[cur]);
            cur++;
        }
        while (cur < intervals.size() && intervals[cur][0] <= newInterval[1])
        {
            newInterval[0] = min(intervals[cur][0],newInterval[0]);
            newInterval[1] = max(intervals[cur][1],newInterval[1]);
            cur++;
        }
        res.push_back(newInterval);
        while (cur < intervals.size())
        {
            res.push_back(intervals[cur]);
            cur++;
        }
        return res;
    }
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions