代码随想录算法训练营 | 56. 合并区间,738.单调递增的数字

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));
    }
}
posted @ 2024-10-06 20:00  漪欢酒  阅读(1)  评论(0编辑  收藏  举报