day27 贪心算法 part05

问题1:合并区间

题目:

56. 合并区间 - 力扣(LeetCode)

思路:

借用数组

代码:

java 复制代码
import org.omg.CORBA.MARSHAL;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;

public class 合并区间 {
    public static void main(String[] args) {
        int[][] strArr3 = merge(new int[][]{{1, 3}, {2, 6}, {8, 10}, {15, 18}});
        // 1. 将二维数组转为Stream,处理每个子数组
        String result = Arrays.stream(strArr3)
                // 2. 将子数组转为"[1, 3]"格式的字符串
                .map(Arrays::toString)
                // 3. 替换[]为{},得到"{1, 3}"
                .map(s -> s.replace("[", "{").replace("]", "}"))
                // 4. 用", "连接所有子数组字符串
                .collect(Collectors.joining(", "));

        // 5. 输出结果
        System.out.println(result);
    }

    public static int[][] merge(int[][] intervals) {
        /*
        1. 可以先排序 按intervals[0]排序
         */
        if (intervals.length <= 1) return intervals;
        List<int[]> res = new LinkedList<>();
        Arrays.sort(intervals,(a,b)->a[0] - b[0]);
        res.add(intervals[0]);
        for (int i = 1; i < intervals.length;i++){
            if (intervals[i][0]<= res.get(res.size()-1)[1]){
                res.get(res.size()-1)[1] = Math.max(res.get(res.size()-1)[1],intervals[i][1]);
            }
            else {
                res.add(intervals[i]);
            }
        }
        int [][] l = new int[res.size()][2];
    return res.toArray(l);
    }

}
问题2:单调递增的数字

题目:

738. 单调递增的数字 - 力扣(LeetCode)

思路:

从右边开始 采用进位制度 后将需要置值为9的 标记好

代码:

java 复制代码
public class 单调递增的数字 {
    public static void main(String[] args) {
        System.out.println(monotoneIncreasingDigits(776));
    }
    public static int monotoneIncreasingDigits(int n) {
        String s = String.valueOf(n);
        char[] chars = s.toCharArray();
        int start = s.length();
        /*
        从右 向左对比
         */
        for (int i = s.length() - 2; i >= 0; i--) {
            if (chars[i] > chars[i + 1]) {
                // 实际上是进位制度
                chars[i]--;
                // 标记从这里开始都是9
                start = i+1;
            }
        }
        for (int i = start; i < s.length(); i++) {
            chars[i] = '9';
        }
        return Integer.parseInt(String.valueOf(chars));
    }
}
问题3:监控二叉树(二刷再看)

题目:

思路:

代码:

相关推荐
qq_4176950510 分钟前
内存对齐与缓存友好设计
开发语言·c++·算法
2301_8166512210 分钟前
实时系统下的C++编程
开发语言·c++·算法
2401_8318249611 分钟前
C++与Python混合编程实战
开发语言·c++·算法
2301_8166512219 分钟前
C++中的策略模式高级应用
开发语言·c++·算法
LDR00621 分钟前
如何使用OpenClaw提高工作效率?
数据结构·算法
liuyao_xianhui21 分钟前
优选算法_模拟_替换所有的‘?‘_C++
开发语言·javascript·数据结构·c++·算法·链表·动态规划
币之互联万物27 分钟前
LLM 偏好算法解析:大语言模型内容收录倾向与 NEOXGEO 技术底蕴
人工智能·算法·语言模型
菜鸟小九29 分钟前
hot100(81-90)
java·数据结构·算法
炽烈小老头33 分钟前
【每天学习一点算法 2026/03/20】单词搜索
学习·算法