zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    Redis学习之(一)
    SpringMVC之学习(0)
    Node.js之Express三
    Node.js之Express二
    Node.js之Express一
    Node.js进程管理之进程集群
    Node.js进程管理之子进程
    Node.js其他模块
    Node.js进程管理之Process模块
    Node.js HTTP Server对象及GET、POST请求
  • 原文地址:https://www.cnblogs.com/skillking/p/9655356.html
Copyright © 2011-2022 走看看