力扣---2020.4.16

56. 合併區間

class Solution {
    public int[][] merge(int[][] intervals) {
        // 先按照區間起始位置排序
        Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);
        // 遍歷區間
        int[][] res = new int[intervals.length][2];
        int idx = -1;
        for (int[] interval: intervals) {
            // 如果結果數組是空的,或者當前區間的起始位置 > 結果數組中最後區間的終止位置,
            // 則不合並,直接將當前區間加入結果數組。
            if (idx == -1 || interval[0] > res[idx][1]) {
                res[++idx] = interval;
            } else {
                // 反之將當前區間合併至結果數組的最後區間
                res[idx][1] = Math.max(res[idx][1], interval[1]);
            }
        }
        return Arrays.copyOf(res, idx + 1);
    }
}

72. 編輯距離

class Solution {
    public int minDistance(String word1, String word2) {
        int len1 = word1.length(),len2 = word2.length();
        //1. 狀態定義  dp[i][j],表示word1的前i個字母轉換成word2的前j個字母所使用的最少操作
        int[][] dp = new int[len1+1][len2+1];
        //2.狀態轉移   i 指向word1 , j 指向 words2
        //若當前字母相同,則dp[i][j] = dp[i-1][j-1];
        //否則,取增刪替 三個操作的最小值,
        //即 dp[i][j] = min(dp[i][j-1],dp[i-1][j],dp[i-1][j-1])+1;
        for(int i = 0;i<=len1;i++){
            dp[i][0] = i;
        }
        for(int j = 0;j<=len2;j++){
            dp[0][j] = j;
        }
        for(int i = 1;i<=len1;i++){
            for(int j = 1;j<=len2;j++){
                if(word1.charAt(i-1) == word2.charAt(j-1)){
                    dp[i][j] = dp[i-1][j-1];
                }else{
                    dp[i][j] = Math.min(Math.min(dp[i][j-1],dp[i-1][j]),dp[i-1][j-1]) + 1;
                }
            }
        }
        return dp[len1][len2];
    }
}

你知道的越多,你不知道的越多。
有道無術,術尚可求,有術無道,止於術。
如有其它問題,歡迎大家留言,我們一起討論,一起學習,一起進步

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