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

题目:

思路:

代码:

相关推荐
学涯乐码堂主41 分钟前
有趣的“打擂台算法”
c++·算法·青少年编程·gesp
Tutankaaa1 小时前
知识竞赛题库设计全攻略
人工智能·算法
WolfGang0073212 小时前
代码随想录算法训练营 Day50 | 图论 part08
数据结构·算法·图论
aini_lovee4 小时前
多目标粒子群优化(MOPSO)双适应度函数MATLAB实现
人工智能·算法·matlab
yong99904 小时前
图像融合与拼接:完整MATLAB工具箱
算法·计算机视觉·matlab
春风不语5054 小时前
深入理解主成分分析(PCA)
算法
apollowing4 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(二十二)
算法·启发式算法·web app
晚枫歌F4 小时前
最小堆定时器
数据结构·算法
Lumos_7774 小时前
Linux -- 线程
java·jvm·算法
七颗糖很甜5 小时前
“十五五”气象发展规划:聚焦五大核心任务
大数据·python·算法