代码随想录训练营第三十一天|LeetCode56.合并区间、LeetCode738.单调递增的数字

56.合并区间

思路:先让二维数组进行排序;

遍历数组,定义一个min表示重合区间的左边界,max表示重合区间的右边界;

如果当前区间左边大于max,就证明重合区间断了,就要对它进行加入ArrayList;然后更新min和max就是当前数组的左边界和右边界。

反正,就证明是重合区间。更新max。

这里中了一个小坑:让当前区间的左边和上一个区间的右边作比较,来判断是不是重合区间。显然[1,6],[2,4],这种[2,4]被包含在重合区间里面,就只能用重合区间的右边界。

java 复制代码
class Solution {
    public int[][] merge(int[][] intervals) {
        Arrays.sort(intervals,(a,b)->a[0]-b[0]);
        List<int[]> list=new ArrayList<>();
        int min=intervals[0][0];
        int max=intervals[0][1];
        for(int i=1; i<intervals.length; i++){
            if(intervals[i][0]>max){
                // list.add(new int[]{min,intervals[i-1][1]});
                list.add(new int[]{min,max});
                min=intervals[i][0];
                max=intervals[i][1];
            }else{
                max=Math.max(intervals[i][1],max);
            }
        }
        list.add(new int[]{min,max});
        return list.toArray(new int[list.size()][]);
    }
}

738.单调递增的数字

暴力法会超时!

可以借助字符串。

因为找一个数字的最大递增数字,就是让迭代让前一个数字-1并且后一个数字变成9,就可以实现。

思路:现将数字转变为字符串,然后从后往前遍历,如果遇到前一个数字比后一个数字大,就让当前数字-1,然后记录当前数字的位置start。

遍历完数字后,就可以再从start位置开始将后面的数字都变成9。

java 复制代码
class Solution {
    public int monotoneIncreasingDigits(int n) {
        String s=String.valueOf(n);
        char[] chars=s.toCharArray();
        int start=s.length();
        for(int i=chars.length-2; i>=0; i--){
            if(chars[i]>chars[i+1]){
                chars[i]--;
                start=i+1;
            }
        }
        for(int i=start; i<chars.length; i++){
            chars[i]='9';
        }
        return Integer.parseInt(String.valueOf(chars));
    }
}
相关推荐
sali-tec12 小时前
C# 基于OpenCv的视觉工作流-章56-OCR
图像处理·人工智能·opencv·算法·计算机视觉·ocr
MicroTech202512 小时前
微算法科技(NASDAQ:MLGO)混合经典量子算法:赋能数字图像处理的创新路径
科技·算法·量子计算
yu859395812 小时前
降低OFDM系统PAPR的各种算法及误码率分析
前端·算法
阿Y加油吧12 小时前
二刷 LeetCode:5. 最长回文子串 & 1143. 最长公共子序列 复盘笔记
笔记·算法·leetcode
广州灵眸科技有限公司12 小时前
瑞芯微(EASY EAI)RV1126B AI算法开发流程
人工智能·算法·机器学习
Rabitebla13 小时前
【C++】string 类:原理、踩坑与对象语义
linux·c语言·数据结构·c++·算法·github·学习方法
小雅痞14 小时前
[Java][Leetcode middle] 167. 两数之和 II - 输入有序数组
java·算法·leetcode
CN-Dust14 小时前
【C++】输入cin例题专题
java·c++·算法
数模竞赛Paid answer15 小时前
2025年MathorCup数学建模A题汽车风阻预测解题文档与程序
算法·数学建模·mathorcup
Old Uncle Tom21 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent