当前位置: 首页 > news >正文

Day33 第八章 贪心算法 part06

一. 学习文章及资料

  • 738.单调递增的数字
  • 968.监控二叉树
  • 总结

二. 学习内容

1. 单调递增的数字

(1) 解题思路:

题目要求小于等于N的最大单调递增的整数,那么我们通过识别需要调整的位置,并将后续的数字设置为 9,从而构造出满足条件的最大数字

(2) 解题步骤:

      

class Solution {
    public int monotoneIncreasingDigits(int n) {
        String s=String.valueOf(n); // 将整数转换为字符串
        char[] c=s.toCharArray();
        int start=s.length(); // 初始化起始位置
        // 从后往前遍历,找到需要调整的位置
        for(int i=s.length()-2;i>=0;i--){
            if(c[i]>c[i+1]){
                c[i]--; // 当前字符减1
                start=i+1; // 记录后续需要设置为9的起始位置
            }
        }
        // 将起始位置到末尾的字符设置为9
        for(int i=start;i<s.length();i++){
            c[i]='9';
        }
        return Integer.parseInt(String.valueOf(c));
    }
}

2. 监控二叉树

(1) 解题思路:

用于解决“为二叉树安装最少的摄像头,使得所有节点都被监控到”的问题。代码的逻辑是通过递归遍历二叉树,并根据节点的状态(有无覆盖、是否有摄像头)来决定如何放置摄像头。

(2) 解题步骤:

             

class Solution {
    int result=0;// 用于记录摄像头的数量
    // 递归函数,返回当前节点的状态
    int traversal(TreeNode cur){
        // 空节点,有覆盖
        if(cur==null) return 2;
        int left=traversal(cur.left);  // 处理左子节点
        int right=traversal(cur.right);// 处理右子节点
        // 情况1:左右子节点都被覆盖(2)
        if(left==2&&right==2) return 0;// 当前节点未被覆盖
        // 情况2:左右子节点至少有一个未被覆盖(0)
        if(left==0||right==0){
            result++;
            return 1;// 安装后返回状态1
        }
        // 情况3:左右子节点至少有一个安装了摄像头(1)
        if(left==1||right==1) return 2; 
        return -1;// 当前节点被覆盖
    }
    public int minCameraCover(TreeNode root) {
        // 处理根节点的情况
        if(traversal(root)==0){
            result++;// 根节点未被覆盖,需要安装摄像头
        }
        return result; // 不会走到这里,代码中的逻辑已经覆盖了所有情况
    }
}

3. 总结

相关文章:

  • Spring Boot的启动流程
  • 【软考-架构】2.1、操作系统概述-进程管理-同步互斥
  • gradle libs.versions.toml文件
  • 【NLP 30、文本匹配任务 —— 传统机器学习算法】
  • android12 屏幕亮度控制修改为线性变化
  • Apache Shiro 反序列化漏洞全解析(Shiro-550 Shiro-721)
  • SQL 全面指南:从基础语法到高级查询与权限控制
  • C++运算符重载的学习笔记
  • 初阶数据结构习题【6】(3顺序表和链表)—— 206. 反转链表
  • 大模型——基于 DIFY 的自动化数据分析实战
  • 文件魔数与其他特征:揭开文件识别的神秘面纱
  • 深入理解指针与回调函数:从基础到实践
  • 【华为】查看防火墙会话表命令
  • 服务器时间同步
  • 覆盖率记录, 非cross bin
  • Kafka底层结构
  • 使用winlogbeat采集windows日志
  • 《 C++ 点滴漫谈: 二十九 》风格 vs. C++ 风格:类型转换的对决与取舍
  • 解锁智能变革密码:浙江大学2025年DeepSeek行业应用案例集深度解析
  • x 的平方根
  • 上海迪士尼蜘蛛侠主题园区正式动工,毗邻“疯狂动物城”
  • 国际博物馆日|在辽宁省博物馆遇见敦煌
  • 15年全程免费,内蒙古准格尔旗实现幼儿园到高中0学费
  • 机器人为啥热衷“搞体育”,经济日报:是向加速融入日常生活发起的冲锋
  • 俄乌直接谈判结束,乌称“毫无成果”
  • 广西百色“致富果”:高品质芒果直供香港,带动近五千户增收