zoukankan      html  css  js  c++  java
  • LeetCode -- 合并区间

    LeetCode链接:https://leetcode-cn.com/problems/merge-intervals/

    题目:

      给出一个区间的集合,请合并所有重叠的区间

    示例:

      输入:[[1, 3], [2, 6], [8, 10], [15, 18]]

      输出:[[1, 6], [8, 10], [15, 18]]

      输入:[[1, 4], [4, 5]]

      输出:[[1, 5]]

      解题思路:先将给定的区间按照左边界的大小进行排序,则排序后两个区间是否可以合并取决于,第一个区间的右边界>=第二个区间的左边界 是否成立,如果成立则可以合并, 如果不成立则不可以合并;

     1 import java.util.Comparator;
     2 import java.util.Arrays;
     3 
     4 public class Solution {
     5     public int[][] merge(int[][] intervals) {
     6         if(intervals == null || intervals.length == 0 || intervals[0].length == 0) return new int[0][0];
     7 
     8         Arrays.sort(intervals, new Comparator<int[]>() {       // 根据给定区间的左边界的大小进行排序
     9             public int compare(int[] o1, int[] o2) {
    10                 return o1[0] - o2[0];
    11             }
    12         });
    13         List<int[]> ans = new ArrayList();
    14         int i = 0;
    15         while(i < intervals.length) {           // 扫描排序后的区间,并进行合并
    16             int left = intervals[i][0];
    17             int right = intervals[i][1];
    18             int j = i + 1;
    19             for(; j < intervals.length; j++) {
    20                 if(right >= intervals[j][0]) {
    21                     right = Math.max(intervals[j][1], right);
    22                 }else {
    23                     break;
    24                 }
    25             }
    26             ans.add(new int[] {left, right});
    27             i = j;
    28         }
    29         int[][] res = new int[ans.size()][2];
    30         int count = 0;
    31         for(int[] cur : ans) {
    32             res[count++] = cur;
    33         }
    34         return res;
    35     }
    36 }

      时间复杂度:排序的时间复杂度为O(NlogN),合并区间时只需要扫描一次数组,所以时间复杂度为O(N),其中N为intervals.length;

      空间复杂度:使用一个List存放合并后的结果,所以空间复杂度为O(N),其中N为intervals的元素个数

  • 相关阅读:
    Javascript中 this的精要总结
    优秀布局的链接
    前端测试框架(学习之路)前言
    SQL之Linq学习篇(目录)
    WebApi 研习之路 (目录)
    关于带参数模糊查询的方法 like --转载自 寂寞沙洲(博客园)
    .Net 程序在自定义位置查找托管/非托管 dll 的几种方法
    .net 生成非托管代码
    GridControl单元格编辑验证的方法
    扩展方法实现DevExpress控件校验
  • 原文地址:https://www.cnblogs.com/OoycyoO/p/11880641.html
Copyright © 2011-2022 走看看