挑了一個比較好懂得解答

覺得多數題目先判斷是否有值

 

// [[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()][]);
 }
文章標籤
全站熱搜
創作者介紹
創作者 程式小試身手 的頭像
程式小試身手

程式小試身手

程式小試身手 發表在 痞客邦 留言(0) 人氣(0)