• 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的元素个数

  • 相关阅读:
    machine learning学习笔记
    google detection
    检查ftp备份数据完整性及短信告警的shell脚本
    javascript获取url参数的方法
    php随机生成福彩双色球号码
    php 身份证号码获取星座和生肖
    JS将搜索的关键字高亮显示实现代码
    C#保存上传来的图片示例代码
    window.onresize 多次触发的解决方法
    setTimeout和setInterval的深入理解
  • 原文地址:https://www.cnblogs.com/OoycyoO/p/11880641.html
Copyright © 2020-2023  润新知