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];
}
}
你知道的越多,你不知道的越多。
有道無術,術尚可求,有術無道,止於術。
如有其它問題,歡迎大家留言,我們一起討論,一起學習,一起進步