[豪の算法奇妙冒险] 代码随想录算法训练营第三十一天 | 56-合并区间、738-单调递增的数字

代码随想录算法训练营第三十一天 | 56-合并区间、738-单调递增的数字


LeetCode56 合并区间

题目链接:https://leetcode.cn/problems/merge-intervals/description/

文章讲解:https://programmercarl.com/0056.合并区间.html

视频讲解:https://www.bilibili.com/video/BV1wx4y157nD/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 重叠区间问题,先排序,让所有的相邻区间尽可能的重叠在一起

​ 按照左边界从小到大排序后,如果 intervals[i][0] <= intervals[i - 1][1] 即 intervals[i] 的左边界 <= intervals[i - 1] 的右边界,则一定有重叠

​ 用合并区间后左边界和右边界,作为一个新的区间加入到result数组即可

image-20260118202332288

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

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

LeetCode738 单调递增的数字

题目链接:https://leetcode.cn/problems/monotone-increasing-digits/description/

文章讲解:https://programmercarl.com/0738.单调递增的数字.html

视频讲解:https://www.bilibili.com/video/BV1Kv4y1x7tP/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 注意设置tag标记从哪里开始往后赋值为9,初始值不落在数组中以防误伤

image-20260118205043759

class Solution {
    public int monotoneIncreasingDigits(int n) {
        String str = String.valueOf(n);
        char[] num = str.toCharArray();
        int tag = num.length;
        for(int i = num.length-1; i > 0; i--){
            if(num[i] < num[i-1]){
                num[i-1]--;
                tag = i;
            }
        }
        for(int i = tag; i < num.length; i++){
            num[i] = '9';
        }
        str = String.valueOf(num);
        return Integer.parseInt(str);
    }
}
posted @ 2026-01-18 20:53  SchwarzShu  阅读(0)  评论(0)    收藏  举报