LeetCode 第56题
这个也比较简单,排个序,然后判断一下就可以
可以在纸上画一下,排完序之后,拼接,是能够保证区间合并的
import java.util.Map.Entry;
class Solution {
public int[][] merge(int[][] intervals) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
int length = intervals.length;
List<Integer> head = new ArrayList<Integer>();
List<Integer> tail = new ArrayList<Integer>();
for(int i = 0; i < length; i++) {
head.add(intervals[i][0]);
tail.add(intervals[i][1]);
}
Collections.sort(head);
Collections.sort(tail);
int head_point = 1;
int tail_point = 1;
int[] tempArr = new int[2];
tempArr[0] = head.get(0);
tempArr[1] = tail.get(0);
while(head_point < length && tail_point < length) {
Integer before = head.get(head_point);
if((before >= tempArr[0] && before <= tempArr[1])) {
tempArr[1] = tail.get(tail_point);
head_point++;
tail_point++;
}else {
map.put(tempArr[0], tempArr[1]);
tempArr[0] = before;
tempArr[1] = tail.get(tail_point);
head_point++;
tail_point++;
}
}
map.put(tempArr[0], tempArr[1]);
int[][] resArr = new int[map.size()][2];
int time = 0;
for(Entry<Integer, Integer> entry : map.entrySet()) {
resArr[time][0] = entry.getKey();
resArr[time][1] = entry.getValue();
time++;
}
return resArr;
}
}