当前位置: 首页 > news >正文

LeetCode 面试经典 150_区间_插入区间(50_57_C++_中等)(合并区间:划分处理)

LeetCode 面试经典 150_区间_插入区间(50_57_C++_中等)

    • 题目描述:
    • 输入输出样例:
    • 题解:
      • 解题思路:
        • 思路一(合并区间:划分处理):
        • 代码实现(思路一(合并区间:划分处理)):
        • 以思路一为例进行调试

题目描述:

给你一个 无重叠的 ,按照区间起始端点排序的区间列表 intervals,其中 intervals[i] = [starti, endi] 表示第 i 个区间的开始和结束,并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval = [start, end] 表示另一个区间的开始和结束。

在 intervals 中插入区间 newInterval,使得 intervals 依然按照 starti 升序排列,且区间之间不重叠(如果有必要的话,可以合并区间)。

返回插入之后的 intervals。
注意 你不需要原地修改 intervals。你可以创建一个新数组然后返回它。

输入输出样例:

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

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

题解:

解题思路:

思路一(合并区间:划分处理):

1、具体划分如下

  • 将重叠之前的区间,加入到结果中 intervals[i][1] < newInterval[0]
  • 将重叠区间进行合并,存入结果中 intervals[i][1] > newInterval[0] intervals[i][0] < newInterval[1]
  • 将重叠区间之后的元素,存入结果中 else

2、复杂度分析:
① 时间复杂度:O(n),n 为数组中元素的个数,只遍历了一遍数组中的元素。
② 空间复杂度:O(1),除存储答案空间外使用常数个存储空间。

代码实现(思路一(合并区间:划分处理)):
class Solution {
public:vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {vector<vector<int>> ans;// 1. 先将所有在新区间之前的区间加入到结果中int i = 0;while (i < intervals.size() && intervals[i][1] < newInterval[0]) {ans.push_back(intervals[i]);i++;}// 2. 合并所有与新区间重叠的区间while (i < intervals.size() && intervals[i][0] <= newInterval[1]) {newInterval[0] = min(newInterval[0], intervals[i][0]);newInterval[1] = max(newInterval[1], intervals[i][1]);i++;}// 3. 将合并后的新区间加入结果ans.push_back(newInterval);// 4. 将所有在新区间之后的区间加入到结果中while (i < intervals.size()) {ans.push_back(intervals[i]);i++;}return ans;}
};
以思路一为例进行调试
#include<iostream>
#include<vector>
using namespace std;class Solution {
public:vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {vector<vector<int>> ans;// 1. 先将所有在新区间之前的区间加入到结果中int i = 0;while (i < intervals.size() && intervals[i][1] < newInterval[0]) {ans.push_back(intervals[i]);i++;}// 2. 合并所有与新区间重叠的区间while (i < intervals.size() && intervals[i][0] <= newInterval[1]) {newInterval[0] = min(newInterval[0], intervals[i][0]);newInterval[1] = max(newInterval[1], intervals[i][1]);i++;}// 3. 将合并后的新区间加入结果ans.push_back(newInterval);// 4. 将所有在新区间之后的区间加入到结果中while (i < intervals.size()) {ans.push_back(intervals[i]);i++;}return ans;}
};int main(int argc, char const *argv[])
{vector<vector<int>> intervals={{1,2},{3,5},{6,7},{8,10},{12,16}};vector<int> newInterval ={4,8};Solution s;vector<vector<int>> ans= s.insert(intervals,newInterval);for(auto &i:ans){cout<<" ["<<i[0]<<","<<i[1]<<"] ";}return 0;
}

LeetCode 面试经典 150_区间_插入区间(50_57)原题链接
欢迎大家和我沟通交流(✿◠‿◠)

http://www.dtcms.com/a/479873.html

相关文章:

  • 东莞网站推广策划值得做的网站
  • 网站举报多久有结果百度竞价个人开户
  • 云蝠智能VoiceAgent 9月升级概览:从功能交互到用户体验
  • 怎么做网站板块西双版纳傣族自治州属于哪里
  • 几大门户网站wordpress上传的gif图不会动
  • Python calendar 教程
  • 网站开发实用技术pdf广西南宁最新消息新闻
  • 做个个人网站要怎么做官方网站、门户网站是什么意思?
  • 网站建设费用先付一半在线做venn图网站
  • 百度商桥怎么接网站室内设计学校培训的
  • Docker监控
  • 建设部网站官网证书编号网站主体负责人
  • PEV2:一款PostgreSQL执行计划可视化工具
  • 网站做搜索要用数据库吗雄安网站建设多少钱
  • 做网站现在好弄么公司网站需求文档
  • wordpress网站程序济南市做网站的公司
  • 电影网站开发长沙求职网招聘网
  • 讲解线程池excute方法细节
  • 的萨芬他的回归
  • 网站信任 用户转化南京网站建设公司 w
  • 长宁区网站制作wordpress无法上传mp3
  • 动态规划核心模型精讲(上篇):斐波那契模型、路径问题与多状态DP
  • 自己做签名网站jsp网站建设毕业设计
  • Franka Research3 使用问题记录
  • 做电影网站需要用什么空间华为网络工程师认证培训
  • 响应式网站好吗建网站有什么要求
  • 如何利用VLLM方式本地部署DeepSeek大模型
  • 重庆网站建设最大建设银行泰安分行网站
  • 广州网站建设找新际流量卡网站
  • e4a做网站wordpress不能编辑