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

第56 合并区间 - 指南

题目

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

示例 3:

输入:intervals = [[4,7],[1,4]]
输出:[[1,7]]
解释:区间 [1,4] 和 [4,7] 可被视为重叠区间。

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

思路

先需要按照左区间进行排序,选取一个数据结构,可以对相邻区间进行合并

这里我认为栈可以对相邻区间进行弹出插入,使用起来比较方便,可以快速弹出插入对区间进行合并

具体思路如下
先按照左区间进行排序,然后把第一个区间插入到栈中
从栈中弹出区间和当前需要插入的区间进行合并
以弹出区间的右区间为基准,分为三种情况
弹出区间的右区间 > 当前区间的右区间         
        直接取弹出区间
弹出区间的右区间 >= 当前区间的左区间         
        左区间取弹出区间的左区间、右区间取当前区间的右区间
否则只有一种情况,弹出区间的右区间 < 当前区间的左区间
        需要把两个区间都插入到栈中
最后栈转化为集合返回结果

代码示例

import java.util.*;
public class lc56 {public static void main(String[] args) {//二维数组编写输入就比较复杂了//考虑到面试要快速验证结果,建议直接把输入结果写在代码中int[][] arr = {{1,4},{4,5}};lc56 lc56 = new lc56();int[][] merge = lc56.merge(arr);for (int i = 0; i < merge.length; i++) {for (int j = 0; j < merge[i].length; j++) {System.out.print(merge[i][j] + " ");}System.out.println();}}public int[][] merge(int[][] intervals) {//先按照左区间进行排序Arrays.sort(intervals,new Comparator() {public int compare(int[] o1, int[] o2) {return o1[0]-o2[0];}});//然后把第一个区间插入到栈中Stack stack = new Stack<>();stack.push(intervals[0]);//从栈中弹出区间和当前需要插入的区间进行合并for (int i = 1; i < intervals.length; i++) {//以弹出区间的右区间为基准,分为三种情况int[] pop1 = stack.pop();//弹出区间的右区间 > 当前区间的右区间//直接取弹出区间if(pop1[1] > intervals[i][1]){stack.push(pop1);//弹出区间的右区间 >= 当前区间的左区间// 左区间取弹出区间的左区间、右区间取当前区间的右区间}else if(pop1[1] >= intervals[i][0]){pop1[1] = intervals[i][1];stack.push(pop1);//否则只有一种情况,弹出区间的右区间 < 当前区间的左区间//需要把两个区间都插入到栈中}else{stack.push(pop1);stack.push(intervals[i]);}}//最后栈转化为集合返回结果return stack.toArray(new int[stack.size()][]);}
}

http://www.jsqmd.com/news/53474/

相关文章:

  • 指针深入第二弹--字符指针、数组指针、函数指针、函数指针数组、转移表的理解加运用 - 实践
  • 详细介绍:uniapp设置vuex公共值状态管理
  • 2025年质量好的全自动旋转蒸发器厂家选购指南与推荐
  • 完整教程:Windows 系统中ffmpeg安装问题的彻底解决
  • 2025年热门的上海旋转蒸发器最新TOP厂家排名
  • 2025年知名的红色展厅设计专业公司推荐,专业红色文化展馆建
  • 2025年信誉好的红色展厅设计专业公司推荐,实力强的红色展厅
  • 2025杭州全域外卖服务商TOP5深度测评:斯创全域外卖与其
  • 2025年度上海办公室装修大型机构推荐:比较不错的办公室装修
  • 2025年热门的真空发生器热门厂家推荐榜单
  • 过滤分离性能检测验证哪家好?行业服务解析
  • 2025年质量好的真空发生器最新TOP厂家排名
  • 2025年质量好的同步托底轨/定制同步托底轨厂家最新权威推荐排行榜
  • 国产家用咖啡机推荐:高口碑品牌体验参考
  • 基于图像检索的智能菜谱匹配技术
  • nestjs 配置管理简单说明
  • 除菌过滤技术哪家强?国内优质企业及选择指南
  • 全自动家用咖啡机推荐:主流品牌特点及用户反馈
  • 家庭全自动咖啡机品牌排行 热门家用品牌推荐
  • 2025年评价高的可调节三段力铰链/不锈钢三段力铰链厂家推荐及选购参考榜
  • 2025年热门的不锈钢三段力铰链品牌厂家排行榜
  • 不同基础如何备赛?犀牛国际教育物理碗培训全攻略
  • 2025年质量好的泡泡兔毛绒厂家最新用户好评榜
  • 2025年比较好的高低兔毛绒厂家推荐及选购指南
  • PHP Fiber 优雅协作式多任务
  • 2025 AMC竞赛培训机构排名前十强,多维度深度评测指南
  • AcWing 4205:树的增边 ← 二分图 + 染色法
  • 2025年评价高的速冻食品包装机最新TOP厂家排名
  • 2025年知名的预包装食品包装机厂家选购指南与推荐
  • ai论文网站推荐:智能化工具提升学术创作效率