文章目录

  • 题目描述
  • 代码 & 思路
    • 更新版 2.0

题目描述

  • 重叠区间:需要有重叠判断
  • 注意:题目并没有说集合间有序,因此要先做一个排序,以左下标为排序值(否则会出错

代码 & 思路

  • 经过排序后,只需要循环一次即可,从左到右:可以合并则合并,不能合并则添加当前数组到答案中,然后开启新的数组继续。
class Solution {public int[][] merge(int[][] intervals) {// 区间个数int len = intervals.length;// 先进行排序O(nlogn)Arrays.sort(intervals,new Comparator<int[]>(){@Overridepublic int compare(int[] a,int[] b){return a[0]-b[0];}});List<int[]> ansL = new ArrayList<>();// 先加入一个初始数组int[] first = new int[2];first[0] = intervals[0][0];first[1] = intervals[0][1];ansL.add(first);int[] nowAL = ansL.get(0);// O(n),一次遍历结束for(int i=1; i < len; i++){// 合并判断if(over(nowAL[0],nowAL[1],intervals[i][0],intervals[i][1])){// 更新区间值判断if(intervals[i][0]<nowAL[0]){nowAL[0] = intervals[i][0];}if(intervals[i][1]>nowAL[1]){nowAL[1] = intervals[i][1];}}// 不合并,则更新else{first = new int[2];first[0] = intervals[i][0];first[1] = intervals[i][1];ansL.add(first);nowAL = first;}}int[][] ans = new int[ansL.size()][2];for(int i=0;i<ansL.size();i++){ans[i] = ansL.get(i);}return ans;}// 重叠判断boolean over(int left1,int right1,int left2,int right2){// 不重叠的情况if(left1 > right2 || left2 > right1){return false;}return true;}
}

更新版 2.0

class Solution {public int[][] merge(int[][] intervals) {if(intervals == null || intervals.length <= 1) {return intervals;} List<int[]> list = new ArrayList<>();// 先排序 O(nlogN)Arrays.sort(intervals, (a, b) -> (a[0] - b[0]));// 时间复杂度 O(n),每次合并第 i ~ j 个区间for(int i = 0, j; i < intervals.length; i = j) {// 定义当前左、右区间int left = intervals[i][0];int right = intervals[i][1];j = i + 1;for(; j < intervals.length && right >= intervals[j][0]; j++) {// 维护右区间right = Math.max(right, intervals[j][1]);}list.add(new int[]{left, right});}return list.toArray(new int[list.size()][2]);}
}
  • 去注释最简版
class Solution {public int[][] merge(int[][] intervals) {if(intervals == null || intervals.length <= 1) {return intervals;} List<int[]> list = new ArrayList<>();Arrays.sort(intervals, (a, b) -> (a[0] - b[0]));for(int i = 0, j; i < intervals.length; i = j) {int left = intervals[i][0];int right = intervals[i][1];j = i + 1;for(; j < intervals.length && right >= intervals[j][0]; j++) {right = Math.max(right, intervals[j][1]);}list.add(new int[]{left, right});}return list.toArray(new int[list.size()][2]);}
}

【LeetCode笔记】56. 合并区间(Java、排序)相关推荐

  1. 《LeetCode力扣练习》第56题 合并区间 Java

    <LeetCode力扣练习>第56题 合并区间 Java 一.资源 题目: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, ...

  2. 56. 合并区间 排序数组

    https://www.b2bchain.cn/6393.html 56. 合并区间首先对开始元素进行排序 之后比较结尾元素判断是否可以加入合并集合//给出一个区间的集合,请合并所有重叠的区间. // ...

  3. leetcode 56. 合并区间

    leetcode 56. 合并区间 题目描述: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] .请你合并所有重叠的区间, ...

  4. LeetCode 56 合并区间

    56. 合并区间 难度中等1153收藏分享切换为英文接收动态反馈 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] .请你合 ...

  5. 力扣记录:贪心算法3较难(1)区间问题——55 跳跃游戏,45 跳跃游戏II,452 用最少数量的箭引爆气球,435 无重叠区间,763 划分字母区间,56 合并区间

    本次题目 55 跳跃游戏 45 跳跃游戏II 452 用最少数量的箭引爆气球 435 无重叠区间 763 划分字母区间 56 合并区间 55 跳跃游戏 局部最优:不管每次跳多少步,取最大跳跃步数,若覆 ...

  6. 56. 合并区间 golang

    56. 合并区间 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: ...

  7. LeetCode 55跳跃游戏56合并区间57插入区间

    原创公众号:bigsai 希望和优秀的你做朋友,感觉不错还请一键三连. 回复进群即可加入和200+人一起打卡.上周打卡: LeetCode 47全排列Ⅱ&48旋转图像 LeetCode 49字 ...

  8. Leetcode链表题目笔记2 合并两个排序的链表

    合并两个排序的链表:合并有序链表 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例: 输入:1->2->4, 1->3->4 输出:1-> ...

  9. 刻意练习:LeetCode实战 -- Task12. 合并K个排序链表

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  10. LeetCode实战:合并K个排序链表

    题目英文 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexi ...

最新文章

  1. 人工智能高薪的背后……
  2. Unity c#中Attribute用法详解
  3. 如何正确选择仓储物流供应商?
  4. 《C++ Primer Plus(第六版)》(25)(第十三章 类继承 笔记)
  5. spanner 的前世今生
  6. iOS 5.0.1完美越狱教程
  7. python获得对象对应的类名称
  8. (转)Spring Boot (十):邮件服务
  9. 【ACL2019】轻松了解张岳实验室的六篇paper
  10. 【爆肝帝,花费3个月整理】金九银十面试季,2020-2021字节跳动所有,软件测试面试题拿走不谢!(附详细答案解析)
  11. Aop切面自定义注解的使用
  12. 12星座的出生年月日性格_十二星座出生日期
  13. 分享simsimi.com小黄鸡官方免费api接口
  14. 华为手机时间用长了会卡吗?
  15. 用户研究专题:桌面研究定性研究
  16. git amend如何撤销
  17. Springboot接入华为云短信平台
  18. Foundry教程:使用多种方式编写可升级的智能代理合约(下)
  19. 【香蕉oi】Game(SAM,SG函数,假题)
  20. 微信小程序-自定义导航栏及返回上一级页面的实现

热门文章

  1. oracle clob截取_Oracle数据库设计规范建议
  2. java 正则首位8或者9的8位数字_从零开始学Python - 第025课:正则表达式的应用
  3. 数字图像处理:视觉系统中的坐标系介绍
  4. 《Python快速入门》6大数据类型详解
  5. Spring Data JPA 从入门到精通~Auditing及其事件详解
  6. ajax脚本格式,jQuery ajax调用 - jim脚本响应是什么格式?
  7. ubuntu mysql5.7配置_ubuntu系统mysql5.7忘记/设置root的坑
  8. 用计算机进行频谱分析时,实验四-利用FFT对信号进行频谱分析1112
  9. python自动化工具哪个好用_微软最强 Python 自动化工具开源了!不用写一行代码!...
  10. 探索比特币源码6-公钥