-
Notifications
You must be signed in to change notification settings - Fork 0
[LeetCode] 57. 插入区间 #99
Copy link
Copy link
Open
Description
题目描述:
给出一个无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
示例 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;
}
};
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels