【代码随想录Day31】贪心算法Part05

56. 合并区间

题目链接/文章讲解:代码随想录
视频讲解:贪心算法,合并区间有细节!LeetCode:56.合并区间_哔哩哔哩_bilibili

class Solution {
    public int[][] merge(int[][] intervals) {
        // 如果区间数组为空,直接返回空数组
        if (intervals.length == 0) {
            return new int[0][0];
        }

        // 按照区间的起始值进行排序
        Arrays.sort(intervals, new Comparator<int[]>() {
            public int compare(int[] o1, int[] o2) {
                return Integer.compare(o1[0], o2[0]);
            }
        });

        // 使用一个列表来存储合并后的区间
        List<int[]> list = new ArrayList<>();
        // 将第一个区间添加到结果中
        int[] currentInterval = intervals[0];

        for (int i = 1; i < intervals.length; i++) {
            // 如果当前区间与上一个区间重叠
            if (intervals[i][0] <= currentInterval[1]) {
                // 合并区间,更新结束值
                currentInterval[1] = Math.max(currentInterval[1], intervals[i][1]);
            } else {
                // 如果不重叠,将当前区间添加到列表中
                list.add(currentInterval);
                currentInterval = intervals[i]; // 更新当前区间
            }
        }
        // 添加最后一个区间
        list.add(currentInterval);

        // 将列表转换为数组并返回
        return list.toArray(new int[list.size()][]);
    }
}

738.单调递增的数字

题目链接/文章讲解:代码随想录
视频讲解:贪心算法,思路不难想,但代码不好写!LeetCode:738.单调自增的数字_哔哩哔哩_bilibili

class Solution {
    public int monotoneIncreasingDigits(int n) {
        // 将数字转为字符串,然后转为字符数组
        String s = String.valueOf(n);
        char[] charArray = s.toCharArray();
        int length = charArray.length;

        // 从倒数第二位开始检查每一位
        for (int i = length - 2; i >= 0; i--) {
            // 如果当前位大于下一位,说明不满足单调递增
            if (charArray[i] > charArray[i + 1]) {
                // 当前位减一
                charArray[i]--;
                // 从当前位的下一位开始,将后面的所有位都设置为9
                for (int j = i + 1; j < length; j++) {
                    charArray[j] = '9';
                }
            }
        }

        // 处理可能出现的前导0情况
        // 将字符数组转换为字符串后再转换为整数
        return Integer.parseInt(new String(charArray));
    }
}

总结

总结:代码随想录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值