首页 > 其他分享 >56. 合并区间

56. 合并区间

时间:2024-11-10 21:21:57浏览次数:1  
标签:vector right cur 56 合并 v2 intervals 区间

  1. 题目链接

  2. 解题思路

    • 合并区间,肯定要按照第一维度排序。
    • 然后依次处理每个区间。假设现在来到i区间[a, b],i之前的区间已经处理好,并且与i区间不重叠。i + 1的区间是[c, d],因为已经按照第一维度排序,所以能够得到a >= c,那么,b和c的关系如何?
      • b < c:说明i区间与i+1区间不重叠,直接得到一个答案,就是i区间
      • b >= c:说明i区间与i+1区间重叠,那么可以得到一个答案就是[a, d]吗?不可以,因为已经重叠,i区间和i+1区间已经变成一个区间,也就是[a, d],但是i+2区间呢?假设i+2区间是[e, f],所以,答案又变成了d与e的关系如何?又是子问题了。
        • 这里有一个小问题就是,两个区间[a, b], [c, d]合并,答案一定是[a, d]吗?不一定,例如[1, 4], [2, 3]
  3. 代码

     class Solution {
    public:
         // 第一个数小排前面,否则第二个数小排前面
         struct MyCompare {
             bool operator()(const vector<int>& v1, const vector<int>& v2) {
                 if (v1[0] != v2[0]) {
                     return v1[0] < v2[0];
                 }
                 return v1[1] < v2[1];
             }
         };
        vector<vector<int>> merge(vector<vector<int>>& intervals) {
            int n = intervals.size();
            sort(intervals.begin(), intervals.end(), MyCompare());
            vector<vector<int>> ans;
            for (int i = 0; i < n; ++i) {
                int cur_left = intervals[i][0];    // 左区间
                int cur_right = intervals[i][1];   // 右区间
                while(i + 1 < n && cur_right >= intervals[i + 1][0]) {
                    cur_right = max(cur_right, intervals[i + 1][1]);
                    i++;
                }
                ans.push_back({cur_left, cur_right});
            }
            return ans;
        }
    };
    

标签:vector,right,cur,56,合并,v2,intervals,区间
From: https://www.cnblogs.com/ouyangxx/p/18538504

相关文章

  • TypeScript基础(一)——交替合并字符串
    TypeScript基础(一)——交替合并字符串题设:输入“abc”、“ef”,输出“aebfc”。1、第一次尝试functionmergeAlternately(word1:string,word2:string):string{//采用三元运算符letmax_len=word1.length<word2.length?word2.length:word1.length;/......
  • 合并果子 / [USACO06NOV] Fence Repair G
    题目描述在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过 n−1n−1 次合并之后,就只剩下一堆了。多多在......
  • DHCP移植到瑞芯微RK356x平台
    dhcpd交叉编译1.简介项目中需要在RK3566上配置DHCP服务器,需要移植DHCP编译环境:Ubuntu20.04DHCP版本:v4.4.32.zlib移植dhcp交叉编译依赖libz.sozlib是一个广泛使用的开源数据压缩库,提供了数据压缩和解压缩的功能下载zlib源码,选择使用1.3.1版本,下载地址https://......
  • java-文件合并
    packagemerge;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileOutputStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.ArrayList;publicclassMerge{publicstat......
  • P4156 论战捆竹竿 题解
    论战捆竹竿题意:给定字符串\(s\),计数"串\(t\)的长度"可能的种数有多少种,使得\(t\)能被\(s\)作为印章印出来,且\(|t|\lew\)。\(n=|s|\le5\times10^5\),\(n\lew\le10^{18}\)。第一步:求出\(s\)的周期\(\{a_1\sima_m\}\),包含\(n\)(\(a_m=n\))。转化为求\(\suma_ib......
  • MR756-ASEMI汽车用整流二极管MR756
    编辑:llMR756-ASEMI汽车用整流二极管MR756型号:MR756品牌:ASEMI封装:BUTTON正向电流:6A反向电压:1000V正向压降:1.2V引线数量:2芯片个数:1芯片尺寸:MIL漏电流:10ua恢复时间:35ns浪涌电流:400A芯片材质:正向电压:1.10V封装尺寸:如图特性:车用二极管工作结温:-65℃~175℃包装方式:50......
  • 代码随想录算法训练营第十七天| 654.最大二叉树 , 617.合并二叉树 , 700.二叉搜索树中的
    654.最大二叉树文章链接:https://programmercarl.com/0654.最大二叉树.html题目链接:https://leetcode.cn/problems/maximum-binary-tree/description/classSolution{public:TreeNode*traversal(vector<int>&nums,intleft,intright){if(left>=right)ret......
  • 【让中国再次伟大】腾讯开源大语言模型Hunyuan-large,支持高达256K文本序列
    腾讯今日发布开源MOE大语言模型Hunyuan-large,总参数量达398B,激活参数量52B。公开测评结果显示,腾讯混元Large在CMMLU、MMLU、CEva1、MATH等多学科综合评测集以及中英文NLP任务、代码和数学等9大维度全面领先,超过Llama3.1、Mixtral等一流的开源大模型。随着人工智能技术的飞......
  • PHP ffmpeg 视频合并
    随着互联网的发展和视频技术的不断完善,视频在我们的生活中扮演着越来越重要的角色。但是,当前视频处理和编辑的需求也在不断增加,这就需要我们使用到一些专业的工具来帮助我们完成这项工作。其中,ffmpeg是一个非常流行的视频处理工具,它支持多种视频编解码格式,可以对视频进行编辑、剪......
  • 力扣88.合并两个有序数组
    为了将nums2的数放到nums1后面,可以将nums1的m个数和nums2的n个数进行比较,按照从大到小的顺序从右向左放入nums1中。最后输出的数组共有m+n个元素,所以最后一个元素的下标为k=m+n-1。每次k--,都要num1[m[和nums2[n]比较,大的数放到nums1[k],同时m--或n--。因为m与n不一定相等,所以......