// LeetCode 56 合并区间
// 二维排序,依次取出区间进行比较,O(nlogn))复杂度
class Solution {
public int[][] merge(int[][] intervals) {
int n = intervals.length;
if (n == 0) return new int[0][0];
Interval[] interval = new Interval[n];
for (int i = 0;i < n; i++){
interval[i] = new Interval(intervals[i][0],intervals[i][1]);
}
Arrays.sort(interval);
// print(interval);
List<Interval> res = new ArrayList<>();
Interval ans = interval[0];
for (int i = 1;i < n;i ++){
if (ans.second < interval[i].first) {
res.add(ans);
ans = interval[i];
}else {
ans.second = Math.max(ans.second,interval[i].second);
}
}
res.add(ans);
// printL(res);
int m = res.size();
int[][] answer = new int[m][2];
for (int i = 0;i < m;i ++){
ans = res.get(i);
answer[i][0] = ans.first;
answer[i][1] = ans.second;
}
return answer;
}
class Interval implements Comparable{
int first;
int second;
public Interval() {
first = 0;
second = 0;
}
public Interval(int a, int b){
first = a;
second = b;
}
@Override
public int compareTo(Object o) {
if (o instanceof Interval) {
Interval in = (Interval) o;
if (first < in.first || first == in.first && second < in.second)
return -1;
else if (first == in.first && second == in.second)
return 0;
return 1;
}
return 0;
}
}
public void print(Interval[] in){
for (int i = 0;i < in.length; i++){
System.out.println(in[i].first + " " + in[i].second);
}
}
public void printL(List<Interval> res) {
for (Interval o : res){
System.out.println(o.first + " " + o.second);
}
}
}