前缀和技巧

  • 区间问题
    • 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],而对于区间合并问题,其实按 endstart 排序都可以。

显然,对于几个相交区间合并后的结果区间 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 ——区间问题(数组区间的并集和交集)相关推荐

  1. GO和JAVA如何处理两个数组中的并集和交集

    最近,在项目中碰到这样一个问题,我们在查看某个模块内容的是否,需要获取该角色下所有用户权限的集合,而某个角色下的用户权限不一样,那么我们需要去得到所有用户拥有的权限的一个并集,根据这个整理了关于go和 ...

  2. 动态规划Ⅲ:数组区间

    动态规划题目类型 & 做题思路总览:动态规划解题套路 & 题型总结 & 思路讲解 文章目录 三.数组区间 1. 数组区间和 2. 等差数列划分 3. 子数组最大和 4. 单词拆 ...

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

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

  4. 数组的合并和升序排列_区间调度问题之区间合并

    读完本文,你可以去力扣拿下如下题目: 56.合并区间 ----------- 上篇文章用贪心算法解决了区间调度问题:给你很多区间,让你求其中的最大不重叠子集. 其实对于区间相关的问题,还有很多其他类型 ...

  5. 树状数组区间修改和区间求和

    最一般树状数组能做到的操作是单点修改,区间求和,都是log(n)级别的.原理就是用树状数组维护a[i]的部分和. 想要做到修改区间,求单点值也很简单,用树状数组维护a[i]的差分数组d[i]的部分和既 ...

  6. [Leetcode][第632题][JAVA][最小区间][堆][滑动窗口]

    [问题描述][困难] [解答思路] 1. 堆 复杂度 class Solution {public int[] smallestRange(List<List<Integer>> ...

  7. hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  8. UESTC 1601 艾尔大停电2 二维树状数组+区间更新

    艾尔大停电2 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  S ...

  9. 树状数组 区间加 区间求和_EXCEL统计区间个数的专属函数

    这次我们学习一个新的函数! 数字区间个数统计 如下图,要求统计四个成绩区间段的人数. 如果只统计一个区间内的人数,比如上图统计60-80分之间的人数,你会怎么办呢? 1.条件计数 =COUNTIF(B ...

  10. 【C++】如何使用数组区间作为参数传入函数中?如何使用const指针传递数组?

    指针传递数组方法: 将指向数组起始位置的指针做为一个参数,将数组长度作为第二个参数.(指针之处数组的位置和数据类型) 即指定元素区间,可以传递两个指针来完成,一个指针标识 数组的开头,另一个 指针标识 ...

最新文章

  1. python实现scp功能_转python实现ftp,scp的实现
  2. _vsnprintf 用法
  3. Haskell 函数式编程快速入门【草】
  4. Matlab求解混沌系统最大李雅普诺夫指数
  5. eclipse 不能将maven jar包导入到tomcat中问题
  6. 微信公众号开发笔记1-获取Access Token
  7. Cap22_信息系统安全管理
  8. SqlServer-RBAC五表权限
  9. asp.net 转换人民币大小金额
  10. wps分析工具库如何加载_量化分析|TALib超好用的技术库,再给它封装一层如何!...
  11. 大数据Hadoop详细介绍(v2016)
  12. ps 学习总结-卸载不了
  13. 分数阶的预估校正算法及实现
  14. python bunch制作可导入数据_python – ImportError:无法导入名称Bunch scikit-learn 0.19
  15. 树上的动态规划--树的最大独立集--刷表法
  16. SQL Server Arithmetic overflow error converting nvarchar to data type numeric
  17. 解决 animation.FuncAnimation 更新函数无反应的方法
  18. 前端网站资源精编!!
  19. 关于图像分割的预处理 transform
  20. Python文件处理os模块介绍 -*- Python基础知识12 -*-

热门文章

  1. Jolla 和旗鱼操作系统与“死神”擦肩而过
  2. 搜索解决方案Solr
  3. 【AAAI 2021】时间序列相关论文汇总
  4. F1意大利站,阿隆索在法拉利的主场夺冠
  5. Service pack
  6. pvid与access的关系_交换机应用之端口模式(access、trunk和hybird)、是否标记(tag、untag)、端口缺省vlan(pvid、native id)...
  7. 工业相机在超级高铁管道视觉检测系统中的应用
  8. 2022年初级护师考试复习题及答案
  9. 【沃顿商学院学习笔记】管理学——09行业对腐败的控制 Corruption Control By Industries
  10. android MVC,MVP,MVVM