代码随想录算法训练营第三十七天 _ 贪心算法_738.单调自增的数字、968.监督二叉树

学习目标:

60天训练营打卡计划!

学习内容:

738.单调自增的数字

  • 听不懂的时候就到该动手了。
  • 必须要从后向前操作,才能把压力逐级传给最前面的这一位。入如:322
java 复制代码
class Solution {
    // java中的String不能修改,需要StringBuilder。
    public int monotoneIncreasingDigits(int n) {
        String snum = Integer.toString(n);
        StringBuilder sb = new StringBuilder(snum);
        int flag = snum.length();
        // 为什么要从后向前遍历呢?
        // 例如332这种数,只有先变为322,才能把第一位变为2。
        // 对sb修改,则对sb操作!
        for(int i = snum.length() - 1; i > 0; i--){
            int pre = sb.charAt(i-1) - '0';
            if(sb.charAt(i) < sb.charAt(i-1)){
                // System.out.println((char)pre - 1);
                sb.setCharAt(i - 1,(char)(pre - 1 + '0'));
                flag = i;
            }
        }
        for(int i = flag; i < snum.length(); i++){
            sb.setCharAt(i, '9');
        }
        return Integer.parseInt(sb.toString());
    }
}

968.监督二叉树

  • 我们可以对二叉树中的节点状态做一个定义:
    0:无覆盖 1.有摄像头 2.有覆盖 其中0和2合到一起就是没有摄像头的所有情况
  • 整个树的所有节点情况可以分为4种:
    1.左右子节点都有覆盖时,其根节点是无覆盖的状态。
    2.左右子节点至少一个是无覆盖的状态,则根节点必须是有摄像头的状态。
    3.左右子节点至少有一个是有摄像头时,根节点一定是有覆盖的。
    4.root节点的在左右子节点时有覆盖的,root节点一定要设置为有摄像头的状态
  • 因为本题涉及到了左右子节点的信息上报给根节点的过程,所以使用后序遍历(左右中)。
  • 可能会出现左右节点既有0又有1的情况,所以优先处理放摄像头的策略。否则根节点可能会被放为2。事例如上图:
java 复制代码
class Solution {
    int res = 0;
    private int traversal(TreeNode root){
        if(root == null)   return 2;
        int left = traversal(root.left);
        int right = traversal(root.right);
        if(left == 2 && right == 2)  return 0;
        if(left == 0 || right == 0){
            res++;
            return 1;
        }
        if(left == 1 || right == 1)   return 2;
        return -1;
    }

    public int minCameraCover(TreeNode root) {
        if(traversal(root) == 0)   res++;
        return res;
    }
}

学习时间:

  • 上午l一小时,下午一个半小时(学习KMP算法),整理文档半小时。
相关推荐
荆棘鸟智能16 分钟前
无人机遥感图像实时拼接算法工程实践:从特征提取到全景融合的完整技术链路
算法·无人机
6Hzlia42 分钟前
【Classic 150 刷题计划】 LeetCode 58. 最后一个单词的长度 | C++ 极简反向遍历与单变量状态机
算法
AgentMaster1 小时前
企业如何应用智能客服?5 个典型场景的技术架构与实施路径
大数据·算法
程曦曦1 小时前
MySQL 生产库误删 98 张表后的时间点恢复实战:从 binlog 解析到资金对账
linux·数据结构·其他·算法·ubuntu·运维开发
weixin_307779132 小时前
C++代码实现MATLAB中的ode45函数功能
开发语言·c++·算法·matlab
不穿鞋的懒羊羊2 小时前
dfs深度优先搜索
算法
OYYHXPJR3 小时前
【算法】区间重叠模板和矩形重叠模板
算法
shehuiyuelaiyuehao3 小时前
算法46,分治快排,排序数组
java·算法·排序算法·排序
远航计算机3 小时前
GEO 选题从哪来?用一份 Query 词库把一年内容排出来
大数据·人工智能·算法·aigc
宣宣猪的小花园.3 小时前
【机器学习】神经网络与表征:为什么深度学习能自动提取特征
人工智能·嵌入式硬件·算法·机器学习