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

题目:

思路:

代码:

相关推荐
Matlab程序猿6 分钟前
【MATLAB源码-第459期】基于matlab的D-H模型与阻尼最小二乘逆运动学的六自由度机械臂五次轨迹规划及动力学前馈PD控制仿真。
人工智能·算法·matlab·d-h建模·六自由度串联机械臂
信奥卷王7 分钟前
[GESP202606 六级] 满二叉树
数据结构·算法
积流成海17 分钟前
用代码实现哈希计算器:Web Crypto API 实战
前端·算法·哈希算法·哈希函数·盘子工具站
Nil20826 分钟前
leetcode 300最长递增子序列
算法·leetcode·职场和发展
垆边人似月.1 小时前
华为机试题 :最大数
c++·算法·华为
zhenaibo5212 小时前
如何与导师有效沟通选题?
算法
熊猫钓鱼>_>2 小时前
大学图论第 6 讲:网络流与二分图匹配——对偶性让瓶颈自己现形
开发语言·算法·面试·职场和发展·图论·校招·面经
没有钱的钱仔2 小时前
最大似然估计(MLE)通俗理解
算法·机器学习·概率论
yi0112 小时前
LeetCode 424. 替换后的最长重复字符|不定长滑动窗口:如何判断窗口是否合法?
笔记·python·算法·leetcode·双指针·滑动窗口
Nebula_g2 小时前
JavaSE高级:动态代理
java·开发语言·算法·javase