• 56. Merge Intervals


    一、题目

      1、审题

      

      2、分析

        给出一个装有间隔数字的数组组成的 List(List中数组是无序的),将有重叠部分的数组进行合并。

    二、解答

      1、思路:

        先将 List 中数组根据 start 进行排序,再依次判断是否有重叠(比较前一个的 end 与后一个的 start),再进行合并。

    /**
     * Definition for an interval.
     * public class Interval {
     *     int start;
     *     int end;
     *     Interval() { start = 0; end = 0; }
     *     Interval(int s, int e) { start = s; end = e; }
     * }
     */
    class Solution {
        public List<Interval> merge(List<Interval> intervals) {
            if(intervals.size() <= 1)
                return intervals;
            
            // 将 intervals 根据 start 排序
            Collections.sort(intervals, new Comparator<Interval>() {
                @Override
                public int compare(Interval o1, Interval o2) {
                    return o1.start - o2.start;
                }
            });
            
            List<Interval> resultList = new LinkedList<>();
            int start = intervals.get(0).start;
            int end = intervals.get(0).end;
            
            for(Interval interval: intervals) {
                if(interval.start <= end) // 有重叠
                    end = Math.max(end, interval.end);
                else {                    // 无重叠
                    resultList.add(new Interval(start, end));
                    start = interval.start;
                    end = interval.end;
                }
            }
            resultList.add(new Interval(start, end));
            return resultList;
        }
    }
  • 相关阅读:
    vbox安装增强功能,实现宿主机文件夹共享并浏览器访问
    linux镜像下载
    linux命令之sed
    关于MySQL数据库的备份方案
    linux防火墙使用以及配置
    Jenkins安装部署(二)
    Jenkins安装部署(一)
    Centos7在虚拟机中扩展磁盘空间
    CentOS 7系统根目录分区扩容
    Linux下的SVN服务器搭建
  • 原文地址:https://www.cnblogs.com/skillking/p/9655356.html
Copyright © 2020-2023  润新知