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 {
int start;
int end;
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 Exceeded
public 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;
}
//440msAC
public 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>() {//借鉴下面方式
@Override
public 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>() {
@Override
public 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 list
prev.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));
}
}