程式碼隨想錄演算法訓練營 | 56. 合併區間,738.單調遞增的數字

漪欢酒發表於2024-10-06

56. 合併區間
題目連結:56. 合併區間
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰合併區間
日期:2024-10-06

想法:重疊區間類似問題
Java程式碼如下:

class Solution {
    public int[][] merge(int[][] intervals) {
        List<int[]> res = new ArrayList<>();
        Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
        for(int i = 1; i < intervals.length; i++) {
            if(intervals[i - 1][1] >= intervals[i][0]) {
                intervals[i][1] = Math.max(intervals[i - 1][1], intervals[i][1]);
                intervals[i][0] = intervals[i - 1][0];
            }else {
                res.add(new int[]{intervals[i - 1][0], intervals[i - 1][1]});
            }
        }
        res.add(new int[]{intervals[intervals.length - 1][0], intervals[intervals.length - 1][1]});
        return res.toArray(new int[res.size()][]);
    }
}

738.單調遞增的數字
題目連結:738.單調遞增的數字
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰單調遞增的數字
日期:2024-10-06

想法:從右往左遍歷,如果前一個數大於後面的數(按N數字排序),前一個數-1,後一個數置為9即可。
Java程式碼如下:

class Solution {
    public int monotoneIncreasingDigits(int N) {
        String[] strings = (N + "").split("");
        int start = strings.length;
        for (int i = strings.length - 1; i > 0; i--) {
            if (Integer.parseInt(strings[i]) < Integer.parseInt(strings[i - 1])) {
                strings[i - 1] = (Integer.parseInt(strings[i - 1]) - 1) + "";
                start = i;
            }
        }
        for (int i = start; i < strings.length; i++) {
            strings[i] = "9";
        }
        return Integer.parseInt(String.join("",strings));
    }
}

相關文章