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:监控二叉树(二刷再看)

题目:

思路:

代码:

相关推荐
To_OC7 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
旖-旎8 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
To_OC9 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
delishcomcn10 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法
触底反弹10 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
雪碧聊技术10 小时前
力扣 LCR 091. 粉刷房子 —— 动态规划入门详解
算法·动态规划
CV-Climber13 小时前
检索技术的实际应用
人工智能·算法
hhzz13 小时前
Tiger AI Platform平台中增加人脸识别功能
图像处理·人工智能·算法·计算机视觉·大模型
从零开始的代码生活_14 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法