[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/






转载于:https://my.oschina.net/jdflyfly/blog/284444

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值