首页 > 其他分享 >力扣2406. 将区间分为最少组数

力扣2406. 将区间分为最少组数

时间:2023-11-10 14:44:05浏览次数:39  
标签:力扣 num 10 相交 2406 range intervals 区间 组数

给你一个二维整数数组 intervals ,其中 intervals[i] = [lefti, righti] 表示  区间 [lefti, righti] 。

你需要将 intervals 划分为一个或者多个区间  ,每个区间  属于一个组,且同一个组中任意两个区间 不相交 。

请你返回 最少 需要划分成多少个组。

如果两个区间覆盖的范围有重叠(即至少有一个公共数字),那么我们称这两个区间是 相交 的。比方说区间 [1, 5] 和 [5, 8] 相交。

 

示例 1:

输入:intervals = [[5,10],[6,8],[1,5],[2,3],[1,10]]
输出:3
解释:我们可以将区间划分为如下的区间组:
- 第 1 组:[1, 5] ,[6, 8] 。
- 第 2 组:[2, 3] ,[5, 10] 。
- 第 3 组:[1, 10] 。
可以证明无法将区间划分为少于 3 个组。

示例 2:

输入:intervals = [[1,3],[5,6],[8,10],[11,13]]
输出:1
解释:所有区间互不相交,所以我们可以把它们全部放在一个组内。

 

提示:

  • 1 <= intervals.length <= 105
  • intervals[i].length == 2
  • 1 <= lefti <= righti <= 106

 

1.模拟,先按左边界对序列进行排序,之后进行多次便历,每次遍历后去删除一组不相交的区间,当序列为空时,遍历次数即为最小组数。(On^2,会超时)

 1 class Solution {
 2 public:
 3     multimap<int,int> range;
 4     int minGroups(vector<vector<int>>& intervals) {
 5         for(auto i : intervals){
 6             range.insert(make_pair(i[0], i[1]));
 7         }
 8         int num = 0;
 9         while(!range.empty()){
10             num++;
11             int right = 0;
12             for (auto it = range.begin(); it != range.end(); ){
13                 if (it->first > right){ //表示不相交
14                     right = it->second;
15                     it = range.erase(it);
16                 }else{
17                     it++;
18                 }
19             }
20         }
21         return num;
22     }
23 };

2.贪心

标签:力扣,num,10,相交,2406,range,intervals,区间,组数
From: https://www.cnblogs.com/coderhrz/p/17824069.html

相关文章

  • 力扣466
     定义str=[s,n]表示str由n个字符串s连接构成。例如,str==["abc",3]=="abcabcabc"。如果可以从s2 中删除某些字符使其变为s1,则称字符串s1 可以从字符串s2获得。例如,根据定义,s1="abc"可以从s2="abdbec"获得,仅需要删除加粗且用斜体标识的字符......
  • 算法day1数组|力扣704二分查找,27移除元素
    数组基础理论数组是存放在连续内存空间上的相同类型数据的集合。可以通过下标轻松获取数据,但是增删元素的时候需要移动其他元素Vector和array的区别vector的底层实现是array,但是vector是容器不是数组数组的元素不能删除,只能覆盖小技巧:取中间intmid=l+r>>1;//有时候怕溢......
  • 力扣2149 暴力+另建两个vector<int>
    2149. 按符号重排数组解题思路另建两个容器,分别存储正负整数,然后依次正负相间放入numsclassSolution{public:vector<int>rearrangeArray(vector<int>&nums){intn=nums.size(),j=1;vector<int>a,b;for(autoi:nums){if(i<0)b.......
  • 力扣练习题
    1、week31.1、有效的括号20-有效的括号publicbooleanisValid(Strings){Deque<Character>stack=newDeque<>();char[]chars=s.toCharArray();for(charc:chars){if(c=='('||c=='['||c=='{&#......
  • 力扣2562 采用双指针
    2562. 找出数组的串联值classSolution{public://返回两数串联后的值longlongis(intm,intn){longlongans=n;inti=0;while(n){n/=10;i++;}returnans+m*pow(10,i);}longlon......
  • 力扣1370 直接模拟
    1370. 上升下降字符串按照题目模拟创建了一个长度为26的数组来存放字母数量kk是结果res的实时长度,cs是第几次(来决定添加最小的还是添加最大的)classSolution{public:stringsortString(strings){stringres;intarr[26]={0};intsize=26;......
  • 03.转录组数据下载
    表达矩阵文件一般比较大,小的几百M,大的1-2个G,浏览器直接下载很慢,后台一直打包下载不下来。1.用命令行下载。 gdc-client工具下载网站: https://gdc.cancer.gov/access-data/gdc-data-transfer-tool 。此外,用gdc-client.exe下载的话还需要额外安装StrawberryPerl。2.用R语言......
  • 力扣905 按奇偶排序数组 C++ 双指针+一次遍历
    905.按奇偶排序数组classSolution{public:vector<int>sortArrayByParity(vector<int>&nums){inti=0,j=nums.size()-1;while(i<nums.size()-1&&i<j){while(i<j&&(nums[i]%2==0))i++;......
  • 力扣2610. 转换二维数组(哈希表)
    给你一个整数数组 nums 。请你创建一个满足以下条件的二维数组:二维数组应该 只 包含数组 nums 中的元素。二维数组中的每一行都包含 不同 的整数。二维数组的行数应尽可能 少 。返回结果数组。如果存在多种答案,则返回其中任何一种。请注意,二维数组的每一行上可以......
  • 【算法题】合法分组的最少组数
    题目:给你一个长度为n下标从0开始的整数数组nums。我们想将下标进行分组,使得[0,n-1]内所有下标i都恰好被分到其中一组。如果以下条件成立,我们说这个分组方案是合法的:对于每个组g,同一组内所有下标在nums中对应的数值都相等。对于任意两个组g1和g2,两个组中下......