本文主要是介绍leetcode oj java 56. 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]
.
二、解决思路:
针对间隔,按照start从小到大排序。(重写了sort方法)
设置标记min和max, 初始的时候min是第一个interval的start, max 是第一个interval的end.
遍历:
如果下一个interval p 的start 大于max, 说明没有重合的部分,此时[min, max] 成为第一个合并的Interval. 并且把min 置为 p的start, max 置为 p的end。
如果下一个interval p 的start 小于max,说明此时重合了, 更新max 为 max 和 p.end 中较大的一个。
注意在遍历到最后的时候要把最后的[min, max] 合并为新的Interval加入list
三、代码:
/*** 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; }* }*/
public class Solution {public List<Interval> merge(List<Interval> intervals) {int n = intervals.size();List<Interval> re = new ArrayList<Interval>();if (n == 0) {return re;}if (n == 1) {re.add(intervals.get(0));return re;}// sortCollections.sort(intervals, new Comparator<Interval>() {public int compare(Interval o1, Interval o2) {if (o1.start > o2.start) {return 1;}if (o1.start == o2.start) {return 0;}return -1;}});int min = intervals.get(0).start;int max = intervals.get(0).end;for (int i = 1; i < n; i++) {Interval t = intervals.get(i);if (t.start > max) {Interval tmp = new Interval(min, max);re.add(tmp);min = t.start;max = t.end;} else {max = max > t.end ? max : t.end;}}Interval tmp = new Interval(min, max);re.add(tmp);return re;}
}
这篇关于leetcode oj java 56. Merge Intervals的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!