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()][]);
    }
arrow
arrow
    全站熱搜

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