leetcode 986 、56 ——区间问题(数组区间的并集和交集)
前缀和技巧
- 区间问题
- 1、区间的交集
- 1.1、题目
- 1.2、思路
- 1.3、题解
- 2、区间的并集
- 2.1、题目
- 2.2、思路
- 2.3、题解
区间问题
1、区间的交集
1.1、题目
原题链接
给定两个由一些 闭区间
组成的列表,每个区间列表都是成对不相交的,并且已经排序
。
返回这两个区间列表的交集。
(形式上,闭区间 [a, b]
(其中 a <= b
)表示实数 x
的集合,而 a <= x<= b
。两个闭区间的交集是一组实数,要么为空集,要么为闭区间。例如,[1, 3] 和 [2, 4] 的交集为 [2, 3]。)
输入:A = [[0,2],[5,10],[13,23],[24,25]], B = [[1,5],[8,12],[15,24],[25,26]]
输出:[[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]
提示:
0 <= A.length < 1000
0 <= B.length < 1000
0 <= A[i].start, A[i].end, B[i].start, B[i].end < 10^9
1.2、思路
1、没有交集
首先,对于两个区间,我们用 [a1,a2] 和 [b1,b2]
表示在 A 和 B 中的两个区间,那么什么情况下这两个区间没有交集呢:
if b2 < a1 || a2 < b1:[a1,a2] 和 [b1,b2] //无交集
2、存在交集
如果交集区间是 [c1,c2]
,那么 c1=max(a1,b1),c2=min(a2,b2)
while i < len(A) && j < len(B):a1, a2 = A[i][0], A[i][1]b1, b2 = B[j][0], B[j][1]if b2 >= a1 && a2 >= b1:res.push_back({max(a1, b1), min(a2, b2)});# ...
1.3、题解
class Solution {public:vector<vector<int>> intervalIntersection(vector<vector<int>>& A, vector<vector<int>>& B) {vector<vector<int>> res;int lenA = A.size();int lenB = B.size();if(lenA == 0 || lenB == 0)return res;int i = 0,j = 0;while(i < lenA && j < lenB){int a1 = A[i][0],a2 = A[i][1];int b1 = B[j][0],b2 = B[j][1];if(a2 >= b1 && b2 >= a1){res.push_back({max(a1,b1),min(a2,b2)});}if(a2 < b2)i++;elsej++;}return res;}
};
2、区间的并集
2.1、题目
原题链接
给出一个区间的集合,请合并所有重叠的区间。
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
2.2、思路
一个区间可以表示为 [start, end]
,而对于区间合并问题,其实按 end
和 start
排序都可以。
显然,对于几个相交区间合并后的结果区间 x,x.start
一定是这些相交区间中 start 最小
的(已经排序过了,从小到大),x.end
一定是这些相交区间中 end 最大
的,毕竟取并集,谁的end最大,覆盖的最广。
2.3、题解
class Solution {public:vector<vector<int>> merge(vector<vector<int>>& intervals) {int len = intervals.size();if(len < 2)return intervals;//对start排序,从小到大sort(intervals.begin(),intervals.end(),[](vector<int>& A,vector<int>& B)//lambda表达式{return A[0] < B[0];//从小到大排序});vector<vector<int>> res;res.emplace_back(intervals[0]);//push第一个元素for(int i = 1;i < len;i++)//从第二个开始和第一个判断{while(intervals[i][0] <= res.back()[1])//intervals[i]开始小于res.back()结束{if(intervals[i][1] > res.back()[1])//intervals[i]结束大于res.back()结束,对于并集来说,谁的end更大,并集的范围也更大res.back()[1] = intervals[i][1];i++;if(i == len)return res;}res.emplace_back(intervals[i]);//没有重合部分,所以不用融合在一起}return res;}
};
leetcode 986 、56 ——区间问题(数组区间的并集和交集)相关推荐
- GO和JAVA如何处理两个数组中的并集和交集
最近,在项目中碰到这样一个问题,我们在查看某个模块内容的是否,需要获取该角色下所有用户权限的集合,而某个角色下的用户权限不一样,那么我们需要去得到所有用户拥有的权限的一个并集,根据这个整理了关于go和 ...
- 动态规划Ⅲ:数组区间
动态规划题目类型 & 做题思路总览:动态规划解题套路 & 题型总结 & 思路讲解 文章目录 三.数组区间 1. 数组区间和 2. 等差数列划分 3. 子数组最大和 4. 单词拆 ...
- LeetCode 55跳跃游戏56合并区间57插入区间
原创公众号:bigsai 希望和优秀的你做朋友,感觉不错还请一键三连. 回复进群即可加入和200+人一起打卡.上周打卡: LeetCode 47全排列Ⅱ&48旋转图像 LeetCode 49字 ...
- 数组的合并和升序排列_区间调度问题之区间合并
读完本文,你可以去力扣拿下如下题目: 56.合并区间 ----------- 上篇文章用贪心算法解决了区间调度问题:给你很多区间,让你求其中的最大不重叠子集. 其实对于区间相关的问题,还有很多其他类型 ...
- 树状数组区间修改和区间求和
最一般树状数组能做到的操作是单点修改,区间求和,都是log(n)级别的.原理就是用树状数组维护a[i]的部分和. 想要做到修改区间,求单点值也很简单,用树状数组维护a[i]的差分数组d[i]的部分和既 ...
- [Leetcode][第632题][JAVA][最小区间][堆][滑动窗口]
[问题描述][困难] [解答思路] 1. 堆 复杂度 class Solution {public int[] smallestRange(List<List<Integer>> ...
- hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- UESTC 1601 艾尔大停电2 二维树状数组+区间更新
艾尔大停电2 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- 树状数组 区间加 区间求和_EXCEL统计区间个数的专属函数
这次我们学习一个新的函数! 数字区间个数统计 如下图,要求统计四个成绩区间段的人数. 如果只统计一个区间内的人数,比如上图统计60-80分之间的人数,你会怎么办呢? 1.条件计数 =COUNTIF(B ...
- 【C++】如何使用数组区间作为参数传入函数中?如何使用const指针传递数组?
指针传递数组方法: 将指向数组起始位置的指针做为一个参数,将数组长度作为第二个参数.(指针之处数组的位置和数据类型) 即指定元素区间,可以传递两个指针来完成,一个指针标识 数组的开头,另一个 指针标识 ...
最新文章
- python实现scp功能_转python实现ftp,scp的实现
- _vsnprintf 用法
- Haskell 函数式编程快速入门【草】
- Matlab求解混沌系统最大李雅普诺夫指数
- eclipse 不能将maven jar包导入到tomcat中问题
- 微信公众号开发笔记1-获取Access Token
- Cap22_信息系统安全管理
- SqlServer-RBAC五表权限
- asp.net 转换人民币大小金额
- wps分析工具库如何加载_量化分析|TALib超好用的技术库,再给它封装一层如何!...
- 大数据Hadoop详细介绍(v2016)
- ps 学习总结-卸载不了
- 分数阶的预估校正算法及实现
- python bunch制作可导入数据_python – ImportError:无法导入名称Bunch scikit-learn 0.19
- 树上的动态规划--树的最大独立集--刷表法
- SQL Server Arithmetic overflow error converting nvarchar to data type numeric
- 解决 animation.FuncAnimation 更新函数无反应的方法
- 前端网站资源精编!!
- 关于图像分割的预处理 transform
- Python文件处理os模块介绍 -*- Python基础知识12 -*-
热门文章
- Jolla 和旗鱼操作系统与“死神”擦肩而过
- 搜索解决方案Solr
- 【AAAI 2021】时间序列相关论文汇总
- F1意大利站,阿隆索在法拉利的主场夺冠
- Service pack
- pvid与access的关系_交换机应用之端口模式(access、trunk和hybird)、是否标记(tag、untag)、端口缺省vlan(pvid、native id)...
- 工业相机在超级高铁管道视觉检测系统中的应用
- 2022年初级护师考试复习题及答案
- 【沃顿商学院学习笔记】管理学——09行业对腐败的控制 Corruption Control By Industries
- android MVC,MVP,MVVM