LeetCode-笔记-57.插入区间

LeetCode-笔记-57.插入区间

1、题目

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

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

 

示例 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] 重叠。

示例 3:
输入:intervals = [], newInterval = [5,7]
输出:[[5,7]]

示例 4:
输入:intervals = [[1,5]], newInterval = [2,3]
输出:[[1,5]]

示例 5:
输入:intervals = [[1,5]], newInterval = [2,7]
输出:[[1,7]]
 

提示:
0 <= intervals.length <= 104
intervals[i].length == 2
0 <= intervals[i][0] <= intervals[i][1] <= 105
intervals 根据 intervals[i][0] 按 升序 排列
newInterval.length == 2
0 <= newInterval[0] <= newInterval[1] <= 105

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/insert-interval
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2、分析题目

最开始的想法是二分查找,这样可以快速找到newInteral[0]与newInteral[1]在区间数组intervals中的位置,但经过实践发现这样实现比较繁琐,最终采用了模拟法。具体可以观察下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E96hsXo2-1617676880848)(C:\Users\wei\AppData\Roaming\Typora\typora-user-images\image-20210406103011637.png)]

1、图中红色区域为intervals的区间 2、图中蓝色区域为newInteral插入的区间。3、建立新区间集合ans

设newInteral左端为left,右端为right。观察图像得合并后区间左端为left=min(left,intervals[i] [0]),右端为right=min(right,intervals[i] [1])。

遍历区间,当left>intervals[i] [1],ans尾部直接添加intervals,当right<intervals[i] [0],ans尾部直接添加一次{left,right},再添加intervals,都不满足则合并区间,遍历完成后如果{left,right}未添加,还需将其添加至尾部。

3、代码如下

class Solution {
public:
    vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
        int left = newInterval[0];
        int right = newInterval[1];
        int length = intervals.size();
        bool placed = false;
        vector<vector<int>> ans;
        for(int i=0;i<length;++i){
            if(intervals[i][0]>right){
                if(!placed){
                    placed=true;
                    ans.push_back({left,right});
                }
                ans.push_back(intervals[i]);
            }else if(intervals[i][1]<left){
                 ans.push_back(intervals[i]);
            }else{
                left=min(left,intervals[i][0]);
                right=max(right,intervals[i][1]);
            }
        }
        if(!placed){
            ans.push_back({left,right});
        }
        return ans;
    }
};

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dGO1X1id-1617676880851)(C:\Users\wei\AppData\Roaming\Typora\typora-user-images\image-20210406104043904.png)]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LeetCode-Editor是一种在线编码工具,它提供了一个用户友好的界面编写和运行代码。在使用LeetCode-Editor时,有时候会出现乱码的问题。 乱码的原因可能是由于编码格式不兼容或者编码错误导致的。在这种情况下,我们可以尝试以下几种解决方法: 1. 检查文件编码格式:首先,我们可以检查所编辑的文件的编码格式。通常来说,常用的编码格式有UTF-8和ASCII等。我们可以将编码格式更改为正确的格式。在LeetCode-Editor中,可以通过界面设置或编辑器设置来更改编码格式。 2. 使用正确的字符集:如果乱码是由于使用了不同的字符集导致的,我们可以尝试更改使用正确的字符集。常见的字符集如Unicode或者UTF-8等。在LeetCode-Editor中,可以在编辑器中选择正确的字符集。 3. 使用合适的编辑器:有时候,乱码问题可能与LeetCode-Editor自身相关。我们可以尝试使用其他编码工具,如Text Editor、Sublime Text或者IDE,看是否能够解决乱码问题。 4. 查找特殊字符:如果乱码问题只出现在某些特殊字符上,我们可以尝试找到并替换这些字符。通过仔细检查代码,我们可以找到导致乱码的特定字符,并进行修正或替换。 总之,解决LeetCode-Editor乱码问题的方法有很多。根据具体情况,我们可以尝试更改文件编码格式、使用正确的字符集、更换编辑器或者查找并替换特殊字符等方法来解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值