Leetcode-合併區間

56. 合併區間

解題思路:

 /**
     * 思路:
     * 1、如果二維數組長度等於0或者1,直接返回當前數組
     * 2、
     *  2.1、數組size > 1,先按照區間的起始點生序排序
     *  2.2、定義臨時變量(tempStart、tempEnd)記錄前一個數組的開始點和結束點,從第二個數組開始遍歷比較
     *  2.3、如果tempStart <= numsNew[i][0] && tempEnd >= numsNew[i][0],tempEnd=tempEnd跟numsNew[i][1]的最大值
     *       臨時區間不包含當前區間,則記錄臨時區間,然後臨時區間的開始、結束點=當前區間的開始和結束點
     *  2.4、nums.isEmpty() || nums.get(nums.size() - 1)[0] != tempStart,需要記錄當前區間
     * */
package com.cn.dl.leetcode;

import java.util.*;

/**
 * Created by yanshao on 2020-02-18.
 */
public class Merge {

    public static int[][] merge(int[][] intervals) {
        if(intervals.length == 0 || intervals.length == 1){
            return intervals;
        }

        List<int[]> nums = new ArrayList<>();
        int[][] numsNew = sort(intervals);
        int tempStart = numsNew[0][0];
        int tempEnd = numsNew[0][1];
        for(int i = 1; i < numsNew.length; i++){
            if(tempStart <= numsNew[i][0] && tempEnd >= numsNew[i][0]){
                tempEnd = Math.max(tempEnd,numsNew[i][1]);
            }else {
                nums.add(new int[]{tempStart,tempEnd});
                tempStart = numsNew[i][0];
                tempEnd = numsNew[i][1];
            }
        }
        /**
         * 數組=new int[][]{{1,4},{1,4},{1,4}}
         * 或者數組最後一個區間不在前面數組包含
         * 這兩個情況下,需要記錄當前區間
         * */
        if(nums.isEmpty() || nums.get(nums.size() - 1)[0] != tempStart){
            nums.add(new int[]{tempStart,tempEnd});
        }
        return nums.toArray(new int[nums.size()][]);
    }

    private static int[][] sort(int[][] intervals){
        List<int[]> intervalsList = Arrays.asList(intervals);
        intervalsList.sort(Comparator.comparingInt(o -> o[0]));
        return intervalsList.toArray(new int[intervalsList.size()][]);
    }


    public static void main(String[] args) {
//        int[][] nums = new int[][]{{1,4},{1,4},{1,4}};
        int[][] nums = new int[][]{{1,4},{0,4},{-1,3},{2,3}};
//        int[][] numsNew = merge(nums);
//        System.out.println(numsNew);
    }

}

 

       我的方法跟大神不能相提並論,但是不管自己的方法多麼複雜,都是自己的產出,日積月累,終會有提升,而且可以看到自己跟大神的差距!有興趣的朋友,可以加個QQ,我們一起學習,一起coding!

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章