zoukankan      html  css  js  c++  java
  • [leetcode] Merge Intervals

    Given a collection of intervals, merge all overlapping intervals.

    For example,
    Given[1,3],[2,6],[8,10],[15,18],
    return[1,6],[8,10],[15,18].

    https://oj.leetcode.com/problems/merge-intervals/

    思路:先按照起始点排序,然后遍历合并即可。

    代码:

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    
    public class Solution {
        public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
            if (intervals == null)
                return null;
            Collections.sort(intervals, new Comparator<Interval>() {
    
                public int compare(Interval a, Interval b) {
                    return a.start - b.start;
                }
    
            });
            ArrayList<Interval> res = new ArrayList<Interval>();
    
            int i;
            for (i = 0; i < intervals.size();) {
                int j = i + 1;
    
                Interval merged = new Interval(intervals.get(i).start,
                        intervals.get(i).end);
                while (j < intervals.size()
                        && isConnected(merged, intervals.get(j))) {
                    merged = merge(merged, intervals.get(j));
                    j++;
                }
                res.add(merged);
                i = j;
            }
    
            return res;
        }
    
        private boolean isConnected(Interval a, Interval b) {
            return (a.start >= b.start && a.start <= b.end)
                    || (b.start >= a.start && b.start <= a.end);
    
        }
    
        private Interval merge(Interval a, Interval b) {
            int newStart = a.start < b.start ? a.start : b.start;
            int newEnd = a.end > b.end ? a.end : b.end;
            a.start = newStart;
            a.end = newEnd;
            return a;
        }
    
        public static void main(String[] args) {
            // [1,3],[2,6],[8,10],[15,18]
            Interval one = new Interval(2, 4);
            Interval two = new Interval(1, 2);
            Interval three = new Interval(4, 10);
            Interval four = new Interval(10, 18);
            ArrayList<Interval> intervals = new ArrayList<Interval>();
            intervals.add(one);
            intervals.add(two);
            intervals.add(three);
            intervals.add(four);
    
            System.out.println(new Solution().merge(intervals));
        }
    
    }

    第二遍记录:

    参考:

    http://leetcodenotes.wordpress.com/2013/08/01/merge-intervals/

  • 相关阅读:
    razor 拼接字符串
    转,CV和resume的区别
    b/s开发者的困境
    sql 下,float和numeric
    VS2010 + Entity FrameWork 4.4 +Mvc 4.0 出现的错误
    Nuget 管理entity framework
    关于 Code First
    C# 输出控制台结果到文件
    WCF wsdlexception(at/html):faultCode=INVALID_WSDL
    Silverlight环境配置
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3810771.html
Copyright © 2011-2022 走看看