Interval(区间类问题)
这类问题其实是有一些固定的解题思路,可以节省很多时间,下面以一个简单的例子作为入门(传送门):
先给出代码,最后我们再进行解释:
class Solution {public int[][] merge(int[][] intervals) {// step 1: sortint len = intervals.length;if(len < 2) return intervals;Arrays.sort(intervals, (a, b)-> a[0] == b[0] ?a[1]-b[1]:a[0]-b[0]);Deque<int[]> deque = new LinkedList<>();deque.push(intervals[0]);int size = 1;// step 2: analyzefor(int i = 1; i<len; i++){if(intervals[i][0] > deque.peek()[1]){ // 不能合并deque.push(intervals[i]);size ++;}else{ // 可以合并int[] temp = deque.pop();temp[1] = Math.max(temp[1], intervals[i][1]);deque.push(temp);}}int[][] res = new int[size][2];for(int i = 0; i<size; i++){res[i][0] = deque.peekLast()[0];res[i][1] = deque.pollLast()[1];}return res;}
}
对付这类问题,拿到手,先无脑排序就行了,这里我们需要根据题目要求确定是按照第数组一个元素排还是第二个元素,需要熟练掌握排序规则的书写,建议用lambda,比较清晰整洁。这里我们需要合并区间,最重要的是抓住当前数组的第二个元素,与下个数组的第一元素的比较关系,假设
intervals[i][1] >= intervals[i+1][0]
证明是可以合并的,那我们其实就可以修改合并区间的右区间temp[1] = Math.max(temp[1], intervals[i][1])
,否则是不能合并的,那就放入结果集中。
再来看一道区间问题的进阶传送门
这道题拿到手,把上面的那道题解改改,就能AC了,
Interval(区间类问题)相关推荐
- 提高篇 第五部分 动态规划 第1章 区间类动态规划
https://blog.csdn.net/guoyangfan_/article/details/81162689 动态规划(四)--区间型动态规划_布纸所云-CSDN博客 [算法详解]区间动态规划 ...
- 区间类动态规划(dp)
一.问题引入 给定长为n的序列a[i],每次可以将连续一段回文序列消去,消去后左右两边会接到一起, 求最少消几次能消完整个序列,n≤500.与线性模型不同,这里消去的顺序是任意的,且消完后左右会接起来 ...
- 合并区间 · Merge Intervals 插入区间 · Insert Interval
[抄题]: 给出若干闭合区间,合并所有重叠的部分. 给出的区间列表 => 合并后的区间列表: [ [[1, 3], [1, 6],[2, 6], => [8, 10],[8, 10], [ ...
- java判断一个数值是否在数学区间范围内
使用方法: 直接调用IntervalUtil.isInTheInterval(String data_value,String interval) 工具类 IntervalUtil package c ...
- java判断某个数值是否在一个数值区间内
区间判断工具类的编写 说明 重点:区间工具类(转载:前行123的博客) 使用 说明 开发中,有这么一个需求,需要根据某些属性值来进行等级判断,并把判断好的结果持久化到数据库中.而这些等级区间的格式是这 ...
- 区间调度之区间交集问题
区间调度之区间交集问题 区间调度问题共写了3片博客,前两篇重叠区间和区间合并分别讲了区间的最大不相交子集和重叠区间的合并,今天再写一个算法,可以快速找出两组区间的交集. 一.解题思路 解决区间问题的思 ...
- [Leedcode][JAVA][第56题][合并区间][数组][贪心算法]
[问题描述]56.合并区间 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18] ...
- mysql区间算法_「五大常用算法」一文图解分治算法和思想
前言 分治算法(divide and conquer)是五大常用算法(分治算法.动态规划算法.贪心算法.回溯法.分治界限法)之一,很多人在平时学习中可能只是知道分治算法,但是可能并没有系统的学习分治算 ...
- 秒杀所有区间相关问题
区间问题 所谓区间问题,就是线段问题,让你合并所有线段.找出线段的交集等等.主要有两个技巧: 排序.常见的排序方法就是按照区间起点排序,或者先按照起点升序排序,若起点相同,则按照终点降序排序.当然,如 ...
最新文章
- C语言中, include 和 include 的区别和注意点
- 讲解sed用法入门帖子
- [BZOJ3214][ZJOI2013]丽洁体(Hash+DP)
- saspython知乎_python学习笔记---linux/windows调用sas程序
- 加号(+)运算符重载
- python大概学多久_自学Python要学多久可以学会?
- mongo基本使用方法
- php -l 检查文件是否语法错误
- Drupal 更新开源编辑器 CKEditor,修复两个 XSS 漏洞
- 简单工厂模式学习总结
- 金九银十面试季,字节跳动面试题拿走不谢(附详细答案解析)
- python C语言加速
- 2018.3.4 st
- yii2中hasMany 和 hasOne 的用法及在页面中增加字段的问题
- 昆明理工大学计算机考研资料汇总
- 清空计算机网络缓存,如何清除DNS缓存 使用命令清理DNS缓存方法
- P3406 海底高铁(前缀和+差分+坑点)
- Unity 3D模型展示之webGL平台展现
- 理性看待 数据分析师 Hot!
- 各大主流BBS论坛程序简介