跟着甜姨整理了这一类问题,没有固定套路,但需要找规律以及细心。

重叠区间

252,会议室,easy

题解

实质是判断有没有重叠区间,将区间按照会议开始时间排序,然后遍历一遍即可。

代码

class Solution{public boolean canAttendMeetings(int[][] intervals){Arrays.sort(intervals, (v1, v2)->v1[0]-v2[0]);for(int i = 1; i < intervals.length; i++){if(intervals[i][0] < intervals[i - 1][1])return false;}return true;}
}
56,合并区间,medium

题解

与上一题的区别在于要合并重叠的区间,还是从intervals的第一个元素开始遍历,最开始比较的对象为intervals[0][1],在遍历过程中不断更新,此对象的含义为上一个区间的末尾。即新的区间的开头比上一区间的末尾大,就不需要合并。

代码

class Solution {public int[][] merge(int[][] intervals) {if(intervals.length == 1) return intervals;Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);int flag = intervals[0][1];int[][] res = new int[intervals.length + 1][2];int idx = 0;res[0] = intervals[0];for(int i = 1; i < intervals.length; i++){if(intervals[i][0] <= flag){res[idx][1] = Math.max(res[idx][1], intervals[i][1]);flag = res[idx][1];}else{res[++idx] = intervals[i];flag = intervals[i][1];}}return Arrays.copyOf(res, idx + 1);}
}
57,插入区间,medium


题解

本题中的区间已经按照起始端点升序排列,因此我们直接遍历区间列表,寻找新区间的插入位置即可。具体步骤如下:

  1. 首先将新区间左边且相离的区间加入结果集(遍历时,如果当前区间的结束位置小于新区间的开始位置,说明当前区间在新区间的左边且相离);
  2. 接着判断当前区间是否与新区间重叠,重叠的话就进行合并,直到遍历到当前区间在新区间的右边且相离,将最终合并后的新区间加入结果集;
  3. 最后将新区间右边且相离的区间加入结果集。

代码

class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {int pL = newInterval[0];int pR = newInterval[1];int[][] res = new int[intervals.length + 1][2];int i = 0;//[[1,2],[3,5],[6,7],[8,10],[12,16]]//         4          8//[[1,2],[3,10],[12,16]]   int idx = 0;//无重叠部分while(i < intervals.length && intervals[i][1] < pL){res[idx++] = intervals[i++];}// 接着判断当前区间是否与新区间重叠,重叠的话就进行合并,直到遍历到当前区间在新区间的右边且相离,// 将最终合并后的新区间加入结果集 while(i < intervals.length && intervals[i][0] <= pR){pL = Math.min(intervals[i][0], pL);pR = Math.max(intervals[i][1], pR);i++;}res[idx++] = new int[]{pL, pR};while(i < intervals.length){res[idx++] = intervals[i++];}return Arrays.copyOf(res, idx);}
}
1288,删除被覆盖区间,medium

题解

贪心

先按区间左边界升序排列,如果相等,按右区间降序排列(消除覆盖区间)

这样只需要更新一个右边界值即可

遍历区间,如果被覆盖,区间数-1;如果没有被覆盖,则更新新的边界值。

代码

class Solution {public int removeCoveredIntervals(int[][] intervals) {if(intervals.length == 1) return 1;Arrays.sort(intervals, (v1, v2) -> v1[0] == v2[0] ? v2[1] - v1[1] : v1[0] - v2[0]);int res = intervals.length;int r = intervals[0][1];for(int i = 1; i < intervals.length; i++){if(intervals[i][1] <= r){res--;}else r = Math.max(r, intervals[i][1]);}return res;}
}
228,汇总区间,easy

题解

对连续的数字按固定格式输出,那么双指针找到不连续的数字即可。

找到之后更新i = j + 1

在一个循环中判断一下双指针所指位置,如果相同则只添加一个元素。

代码

class Solution {public List<String> summaryRanges(int[] nums) {//双指针List<String> res = new ArrayList<>();if(nums.length == 0) return res;if(nums.length == 1){res.add(String.valueOf(nums[0]));return res;}int i = 0;for(int j = 0; j < nums.length; j++){//找到第一个不符合递增规则的,或者遍历完成if(j == nums.length - 1 || nums[j] + 1 != nums[j + 1]){String tmp = String.valueOf(nums[i]) + "->" + String.valueOf(nums[j]);if(nums[i] != nums[j])res.add(tmp);else res.add(String.valueOf(nums[j]));i = j + 1;}}return res;}
}

【LeetCode刷题】重叠区间问题相关推荐

  1. Leetcode刷题986. 区间列表的交集

    给定两个由一些 闭区间 组成的列表,每个区间列表都是成对不相交的,并且已经排序. 返回这两个区间列表的交集. (形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合,而 a & ...

  2. c语言贪心算法合并箭,LeetCode刷题题库:贪心算法

    LeetCode刷题笔记:贪心算法 自大学开始,我便陆陆续续的学习一些 算法和数据结构 方面的内容,同时也开始在一些平台刷题,也会参加一些大大小小的算法竞赛.但是平时刷题缺少目的性.系统性,最终导致算 ...

  3. C#LeetCode刷题-贪心算法

    贪心算法篇 # 题名 刷题 通过率 难度 44 通配符匹配 17.8% 困难 45 跳跃游戏 II 25.5% 困难 55 跳跃游戏 30.6% 中等 122 买卖股票的最佳时机 II C#LeetC ...

  4. C#LeetCode刷题-二分查找​​​​​​​

    二分查找篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...

  5. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  6. LeetCode 刷题之路(python版)

    摘自:https://blog.csdn.net/qq_32384313/article/details/90745354 LeetCode 刷题之路(python版) 小坏wz 2019-06-02 ...

  7. 个人LeetCode刷题记录(带题目链接及解答)持续更新

    Leetcode 刷题 注:~[完成]代表还有一些方法没看,最后再看 一.一些需要重刷的典型题: 1.快速排序,归并排序,堆排序(递归的思想) 2.链表中的回文链表,其中的快慢指针,多看,多练 3.链 ...

  8. 卷进大厂系列之LeetCode刷题笔记:二分查找(简单)

    LeetCode刷题笔记:二分查找(简单) 学算法,刷力扣,加油卷,进大厂! 题目描述 涉及算法 题目解答 学算法,刷力扣,加油卷,进大厂! 题目描述 力扣题目链接 给定一个 n 个元素有序的(升序) ...

  9. LeetCode刷题:滑动窗口模板以及典型例题

    作者:fuxuemingzhu 链接:https://leetcode-cn.com/problems/max-consecutive-ones-iii/solution/fen-xiang-hua- ...

  10. C#LeetCode刷题-二叉搜索树

    二叉搜索树篇 # 题名 刷题 通过率 难度 220 存在重复元素 III 19.3% 中等 315 计算右侧小于当前元素的个数 31.9% 困难 327 区间和的个数 29.5% 困难 352 将数据 ...

最新文章

  1. Ferderweisser
  2. 查看dll 的是32位还是64位
  3. SQL判断NULL的几种常见方式
  4. 在 Delphi 下使用 DirectSound (14): 测试镶边效果器 IDirectSoundFXFlanger8
  5. IDA python 脚本编程使用参考资料链接
  6. 查看本地服务器MYSQL的端口号
  7. lg手机历史机型_LG手机业务亏损增加70% 宣称主因是国产品牌卖的太便宜
  8. java.sql.SQLException: Access denied for user ‘‘@‘localhost‘ (using password: NO)报错问题解决
  9. 实战tkinter图形界面开发_八款常用的 Python GUI 开发框架推荐
  10. C语言简明教程--指针5
  11. Vue 中的 key 有什么作用?
  12. 投影机拼接融合技术--UE4拼接
  13. win10最强DLL注入工具,远程线程注入、消息钩子注入、输入法注入、EIP注入、注册表注入、APC注入(APC好像不能用)
  14. 【随笔】那些免费友好的遥感影像数据下载网站
  15. 【Unity Shader 中Pass相关介绍_第一篇】
  16. 使用tftpd32烧写内核(拯救你的“砖”)
  17. 跟我一起云计算(6)——openAPI
  18. 高防IP具备哪些优势?
  19. Java的短信接口的使用
  20. layui表格 设置默认排序_改造 layui 表格组件实现多重排序

热门文章

  1. hyperledger/fabric-区块链快速入门教程+错误解决——良好用户体验
  2. kali连接不上网络
  3. 网站 图标 背景 素材 网址 js效果网址 导航效果网址 网址大全 素材集
  4. 远程桌面对方计算机无法远程,win7开启QQ远程协助无法连接对方电脑如何解决
  5. echarts设置x轴字体不同颜色
  6. centos7—DNS域名系统
  7. 第四章 字体和格式相关
  8. 计算机网络专业函授,函授计算机专业都考什么课程
  9. 单例模式( Single Pattern ): 不仅仅是回字的四种写法
  10. 音视频传输-之RTP/RTCP协议