题目:

Given a collection of intervals, merge all overlapping intervals.

Example 1:

  1. Input: [[1,3],[2,6],[8,10],[15,18]]
  2. Output: [[1,6],[8,10],[15,18]]
  3. Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].

Example 2:

  1. Input: [[1,4],[4,5]]
  2. Output: [[1,5]]
  3. Explanation: Intervals [1,4] and [4,5] are considered overlapping.

NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.

分析:

给定一个区间的集合,合并所有重复的区间。

也就是将重复的区间合并成一个大的区间,例如[1,5]和[3,7]将会合并成[1,7],做法就是先将区间按左端点值由小到大排序,然后遍历区间,当后一个区间的左端点值大于它前一个区间的右端点值,代表两个区间无重复部分,将前一个加入到结果中,反之,代表有重复的,需要合并两个区间,由于区间的顺序由左端点值排序,则合并后的区间的左端点值等于前一个区间的左端点值,而右端点值则在两个区间的右端点值中取最大值,因为有可能发生包含这种情况,比如[1,7]和[3,5]这种,合并后就还是[1,7]。

程序:

C++

  1. class Solution {
  2. public:
  3. vector<vector<int>> merge(vector<vector<int>>& intervals) {
  4. if(intervals.size() == )
  5. return {};
  6. vector<vector<int>> res;
  7. sort(intervals.begin(), intervals.end(), cmp());
  8. for(auto interval:intervals){
  9. if(res.empty())
  10. res.push_back(interval);
  11. else if(res.back()[] < interval[])
  12. res.push_back(interval);
  13. else{
  14. auto t = res.back();
  15. res.pop_back();
  16. res.push_back({t[], max(t[], interval[])});
  17. }
  18. }
  19. return res;
  20. }
  21. struct cmp {
  22. bool operator() (const vector<int>& A, const vector<int>& B) {
  23. return A[] < B[];
  24. }
  25. };
  26. };

Java

  1. class Solution {
  2. public int[][] merge(int[][] intervals) {
  3. if(intervals.length == 0)
  4. return intervals;
  5. Arrays.sort(intervals, (o1, o2) -> {
  6. return o1[0] - o2[0];
  7. });
  8. LinkedList<int[]> res = new LinkedList<>();
  9. for(int[] interval:intervals){
  10. if(res.isEmpty())
  11. res.add(interval);
  12. else if(res.getLast()[1] < interval[0])
  13. res.add(interval);
  14. else{
  15. int[] t = res.removeLast();
  16. res.add(new int[]{t[0], Math.max(t[1], interval[1])});
  17. }
  18. }
  19. return res.toArray(new int[res.size()][]);
  20. }
  21. }

LeetCode 56. Merge Intervals 合并区间 (C++/Java)的更多相关文章

  1. [LeetCode] 56 - Merge Intervals 合并区间

    Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...

  2. [leetcode]56. Merge Intervals归并区间

    Given a collection of intervals, merge all overlapping intervals. Example 1: Input: [[1,3],[2,6],[8, ...

  3. leetcode 56. Merge Intervals 、57. Insert Interval

    56. Merge Intervals是一个无序的,需要将整体合并:57. Insert Interval是一个本身有序的且已经合并好的,需要将新的插入进这个已经合并好的然后合并成新的. 56. Me ...

  4. LeetCode 56. Merge Intervals (合并区间)

    Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...

  5. [LeetCode] Merge Intervals 合并区间

    Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8, ...

  6. 【LeetCode每天一题】Merge Intervals(合并区间)

    Given a collection of intervals, merge all overlapping intervals. Example 1: Input: [[1,3],[2,6],[8, ...

  7. 056 Merge Intervals 合并区间

    给出一个区间的集合, 请合并所有重叠的区间.示例:给出 [1,3],[2,6],[8,10],[15,18],返回 [1,6],[8,10],[15,18].详见:https://leetcode.c ...

  8. LeetCode: 56. Merge Intervals(Medium)

    1. 原题链接 https://leetcode.com/problems/merge-intervals/description/ 2. 题目要求 给定一个Interval对象集合,然后对重叠的区域 ...

  9. Leetcode56. Merge Intervals合并区间

    给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] ...

随机推荐

  1. potel99se 文件损坏修复

    一直使用protel99se来做电路图,非常方便快捷.最近一次打开常用的一个ddb文件,提示失败,无法打开了.protel99使用的数据库文件实际上是access97 的mdb数据库,于是修改成mdb ...

  2. Linux文件内容重定向

    文件描述符 可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作. 用户可以自定义文件描述符范围是:3-num,这个最大数字, ...

  3. 转载---class文件中的字段表集合--field字段在class文件中是怎样组织的

    写的太好了! https://blog.51cto.com/1459294/1932331

  4. orcle导入大数据文件

    0,创建ctl文件  内容为 OPTIONS (skip=0) LOAD DATA  CHARACTERSET 'UTF8' INFILE 'F:\anhui_data\20180814\shangh ...

  5. 模块化系列教程 | 深入源码分析阿里JarsLink1.0模块化框架

    1. 概述 1.1 模块动态加载卸载主流程 2. 模块动态加载 2.1 模块加载源码分析 2.1.1 AbstractModuleRefreshScheduler 2.1.2 ModuleLoader ...

  6. java代码之美(14)---Java8 函数式接口

    Java8 函数式接口 之前写了有关JDK8的Lambda表达式:java代码之美(1)---Java8 Lambda 函数式接口可以理解就是为Lambda服务的,它们组合在一起可以让你的代码看去更加 ...

  7. VC实现快递查询

    #include <iostream> #include <string> #include <cstdlib> #include <afxinet.h> ...

  8. 视觉slam十四讲第七章课后习题7

    版权声明:本文为博主原创文章,转载请注明出处:http://www.cnblogs.com/newneul/p/8544369.html  7.题目要求:在ICP程序中,将空间点也作为优化变量考虑进来 ...

  9. 理解POP、OOP、AOP编程

    一.面向过程编程:(POP:Procedure Oriented Programming) 面向过程编程是以功能为中心来进行思考和组织的一种编程方法,它强调的是功能(即系统的数据被加工和处理的过程), ...

  10. 最大流-前置push-relabel算法实现

    Front Push-Relabel Algorithm 接口定义 Input:容量数组vector<vector<int>> capacity ,大小为n:源点int sou ...