def merge(intervals):
intervals.sort(key=lambda x:x[0])
res=[intervals[0]]
for s,e in intervals[1:]:
if s<=res[-1][1]: res[-1][1]=max(res[-1][1],e)
else: res.append([s,e])
return res
public int[][] merge(int[][] iv){
Arrays.sort(iv,(a,b)->a[0]-b[0]);
List<int[]> res=new ArrayList<>(); res.add(iv[0]);
for(int i=1;i<iv.length;i++){
int[] last=res.get(res.size()-1);
if(iv[i][0]<=last[1]) last[1]=Math.max(last[1],iv[i][1]);
else res.add(iv[i]);
} return res.toArray(new int[0][]);
}
res[-1] negative index vs get(size-1).
def merge(intervals):
intervals.sort(key=lambda x:x[0])
res=[intervals[0]]
for s,e in intervals[1:]:
if s<=res[-1][1]: res[-1][1]=max(res[-1][1],e)
else: res.append([s,e])
return res
public int[][] merge(int[][] iv){
Arrays.sort(iv,(a,b)->a[0]-b[0]);
List<int[]> res=new ArrayList<>(); res.add(iv[0]);
for(int i=1;i<iv.length;i++){
int[] last=res.get(res.size()-1);
if(iv[i][0]<=last[1]) last[1]=Math.max(last[1],iv[i][1]);
else res.add(iv[i]);
} return res.toArray(new int[0][]);
}
1. Sort by start 2. Merge overlapping