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

算法通关村第十七关——插入区间

LeetCode435,给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。

示例1:

输入:interva1s=[[1,3],[6,9]],newInterva1=[2,5]

输出:[[1,5],[6,9]]

解释:新区间[2,5]与[1,3]重叠,因此合并成为[1,5]。

示例2:

输入:interva1s=[[1,2],[3,5],[6,7],[8,10],[12,16]], newInterva1=[4,8]

输出:[1,2],[3,10],[12,16]

解释:新区间[4,8]与[3,5],[6,7],[8,10]重叠,因此合并成为[3,10]。

public int[][] insert(int[][] intervals, int[] newInterval) {int[][] res = new int[intervals.length + 1][2];int idx = 0;// 遍历区间列表// 首先将新区间左边且相离的区间加入结果集int i = 0;while (i < intervals.length && intervals[i][1] < newInterval[0]) {res[idx++] = intervals[i++];}// 判断当前区间是否与新区间重叠,重叠的话就进行合并,直到遍历到当前区间在新区间的右边且相离while (i < intervals.length && intervals[i][0] <= newInterval[1]) {newInterval[0] = Math.min(intervals[i][0], newInterval[0]);newInterval[1] = Math.max(intervals[i][1], newInterval[1]);i++;}res[idx++] = newInterval;// 将新区间右边且相离的区间加入结果集while (i < intervals.length) {res[idx++] = intervals[i++];}return Arrays.copyOf(res, idx);
}

在这里,首先判断要加入的区间的左边是否小于当前区间的右边,如果当前区间的右边小于新区间的左边的话,那就说明要插入的区间对当前区间没有影响。

知道满足条件时,在下一个循环处理,如果当前区间的左边≤新区间的右边的话,让新区间的左边等于两个区间的左边的最小值,让新区间的右边等于当前区间的新区间的右边的最大值。再将这里组合起来的区间加入到结果数组中。

http://www.lryc.cn/news/151296.html

相关文章:

  • Jenkins java8安装版本安装
  • 线上问诊:数仓开发(二)
  • Ansible自动化运维工具(三)
  • ChatGPT在创新和创业中的应用如何?
  • Log4j2 配置日志记录发送到 kafka 中
  • Linux用户与组管理(03)(八)
  • Java自定义异常
  • vscode远程调试php
  • C语言:截断+整型提升练习
  • Kubernetes技术--k8s核心技术kubectl命令行工具
  • Element浅尝辄止9:Popover 弹出框组件
  • 程序开发:构建功能强大的应用的艺术
  • (七)k8s实战-高级调度
  • HTTP/1.1协议中的八种请求
  • 面试系列 - JVM内存模型和调优详解
  • JavaScript -【第一周】
  • 高性能缓存 Caffeine 原理及实战
  • 【算法】leetcode 105 从前序与中序遍历序列构造二叉树
  • 11 | Spark计算数据文件中每行数值的平均值
  • AI与游戏创新:深度学习的起跑枪声
  • 【GUI开发】用python爬YouTube博主信息,并开发成exe软件
  • 7.6 函数的递归调用
  • 本地开机启动jar
  • 解决uniapp手机真机调试时找不到手机问题
  • HarmonyOS应用开发者-----高级认证试题及答案
  • R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证指数收益时间序列...
  • 详细教程:Stegsolve的下载,jdk的下载、安装以及环境的配置
  • Watermark 是怎么生成和传递的?
  • 深度学习论文分享(八)Learning Event-Driven Video Deblurring and Interpolation
  • UI设计开发原则