0%

56. Merge Intervals

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function merge(A: number[][]): number[][] {
if(!A){
return A
}
let [i,k]=[1,0]
A.sort((a,b)=>{
return a[0]-b[0]
})
let R=[A[0]]
while(true){
while(i<A.length && R[k][1]<A[i][0]) {
R.push(A[i])
k++
i++
}
if(i>=A.length) break
R[k][1]=Math.max(R[k][1],A[i][1])
i+=1
}
return R
};

It can be simplified:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function merge(A: number[][]): number[][] {
if(!A){
return A
}
let [i,k]=[1,0]
A.sort((a,b)=>{
return a[0]-b[0]
})
let R=[]
for(let i=0;i<A.length;i++){
if(R.length==0){
R.push(A[i])
continue
}
if(R[R.length-1][1]<A[i][0]){
R.push(A[i])
continue
}
if(R[R.length-1][1]>=A[i][0]){
R[R.length-1][1]=Math.max(R[R.length-1][1], A[i][1])
}
}
return R
};