close
挑了一個比較好懂得解答
覺得多數題目先判斷是否有值
//
[[1,3],[2,6],[8,10],[15,18]]
public int[][] merge(int[][] intervals) {
int length=intervals.length;//4
if(length<=1)
return intervals;
int[] start = new int[length];
int[] end = new int[length];
for(int i=0;i<length;i++){
start[i]=intervals[i][0];//每個陣列第一個比
[1,2,8,15]
end[i]=intervals[i][1];//每個陣列第二個比
[3,6,10,18]
}
Arrays.sort(start);
Arrays.sort(end);
int startIndex=0;
int endIndex=0;
List<int[]> result = new LinkedList<>();
while(endIndex<length){
//as endIndex==length-1 is evaluated first, start[endIndex+1] will never hit out of index
if(endIndex==length-1 || start[endIndex+1]>end[endIndex]){//2>3->8>6->[1,6]
result.add(new int[]{start[startIndex],end[endIndex]});
startIndex=endIndex+1;
}
endIndex++;
}
return result.toArray(new int[result.size()][]);
}
全站熱搜
留言列表