LeetCode_56---Merge Intervals

来源:互联网 发布:mp3购买推荐淘宝网 编辑:程序博客网 时间:2024/06/05 11:09

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].

Hide Tags
 Array Sort

Code:


/** *  */package From41;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.LinkedList;import java.util.List;/** * @author MohnSnow * @time 2015年6月26日 下午2:38:46 *  */public class LeetCode56 {/** * @param argsmengdx *            -fnst */public static class Interval {intstart;intend;Interval() {start = 0;end = 0;}Interval(int s, int e) {start = s;end = e;}public String toString() {String result = "start:" + start + " end: " + end;return result;}}// Time Limit Exceededpublic static List<Interval> merge(List<Interval> intervals) {Interval temp;List<Interval> result = new LinkedList<Interval>();if (intervals.size() <= 1) {return intervals;}for (int i = intervals.size() - 1; i > 0; i--) {//复杂度太高for (int j = 0; j < i; j++) {if (intervals.get(i).start < intervals.get(j).start) {int tempInt = intervals.get(i).start;intervals.get(i).start = intervals.get(j).start;intervals.get(j).start = tempInt;tempInt = intervals.get(i).end;intervals.get(i).end = intervals.get(j).end;intervals.get(j).end = tempInt;}}}temp = new Interval(intervals.get(0).start, intervals.get(0).end);for (int i = 1; i < intervals.size(); i++) {if (temp.end >= intervals.get(i).start && temp.end < intervals.get(i).end) {temp.end = intervals.get(i).end;}if (temp.end < intervals.get(i).start) {result.add(temp);temp.start = intervals.get(i).start;//出错地方,这个地方我就先不改了temp.end = intervals.get(i).end;//出错地方,这个地方我就先不改了,造成了intervals里面的变化}}result.add(temp);return result;}//440msACpublic static List<Interval> merge1(List<Interval> intervals) {List<Interval> result = new ArrayList<Interval>();if (intervals.size() <= 1) {return intervals;}Collections.sort(intervals, new Comparator<Interval>() {//借鉴下面方式@Overridepublic int compare(Interval obj0, Interval obj1) {return obj0.start - obj1.start;}});Interval temp = null;for (int i = 0; i < intervals.size(); i++) {if (temp == null || temp.end < intervals.get(i).start) {result.add(intervals.get(i));temp = intervals.get(i);} else if (temp.end >= intervals.get(i).start && temp.end < intervals.get(i).end) {temp.end = intervals.get(i).end;}}return result;}//https://leetcode.com/discuss/33434/a-clean-java-solution//提供了一种排序方式public static List<Interval> merge2(List<Interval> intervals) {Collections.sort(intervals, new Comparator<Interval>() {@Overridepublic int compare(Interval obj0, Interval obj1) {return obj0.start - obj1.start;}});List<Interval> ret = new ArrayList<>();Interval prev = null;for (Interval inter : intervals) {if (prev == null || inter.start > prev.end) {ret.add(inter);prev = inter;} else if (inter.end > prev.end) {// Modify the element already in listprev.end = inter.end;}}return ret;}public static void main(String[] args) {Interval a = new Interval(1, 4);Interval b = new Interval(5, 6);//Interval c = new Interval(9, 19);//Interval d = new Interval(15, 18);List<Interval> intervals = new LinkedList<Interval>();intervals.add(a);intervals.add(b);//intervals.add(c);//intervals.add(d);System.out.println("merge: " + merge(intervals));System.out.println("merge1: " + merge1(intervals));System.out.println("merge2: " + merge2(intervals));}}



0 0