贪心算法06(leetcode738,968)

参考资料:

https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html

738. 单调递增的数字

题目描述:

当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。

给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。

示例 1:

输入: n = 10
输出: 9

思路分析:

        从后往前遍历,若两两不符合递增,则前一位数值-1,并将start(‘9’开始的下标)设为后一位的index

注意:1. start初始为len,考虑到如“1234”的情况

           2.转为字符数组便于处理

代码实现:

class Solution {
    public int monotoneIncreasingDigits(int n) {
        String s=String.valueOf(n);
        char[] chars=s.toCharArray();
        int len=chars.length;
        int start=len;//9开始的下标
        for(int i=len-2;i>=0;i--){//后往前
            if(chars[i]>chars[i+1]){
                chars[i]--;
                start=i+1;
            }
        }
        for(int i=start;i<len;i++){
            chars[i]='9';
        }
        return Integer.parseInt(String.valueOf(chars));
    }
}

 968. 监控二叉树

题目描述:

给定一个二叉树,我们在树的节点上安装摄像头。

节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。

计算监控树的所有节点所需的最小摄像头数量。

示例 1:

输入:[0,0,null,0,0]
输出:1
解释:如图所示,一台摄像头足以监控所有节点

思路分析:

1. 后序遍历(左右中):每个叶子结点都要被监视到

2. 贪心:叶子节点的父节点放监控,最大范围的监控。

3. 每个节点的三种状态:(0)无覆盖(1)有覆盖,无放监控(2)放监控 。

4. 四种情况:(1)左右孩子都是“1”,则自己是“0”(2)左右孩子之一是“0”,则自己是“2”(3)剩下的情况(任一孩子是“2”),则自己是“1”         //(4)本应在root的上一个节点放监控,但root没有上一个,该情况在main()函数中处理。

代码实现:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int res;
    public int minCameraCover(TreeNode root) {
        res=0;
        if(f(root)==0) res++;
        return res;
    }
    public int f(TreeNode cur){
        if(cur==null) return 1;
        // 0:无覆盖
        // 1:有覆盖,无监控
        // 2:有覆盖,有监控
        // 后序遍历:左右中
        int l=f(cur.left);//左
        int r=f(cur.right);//右
        //中
        if(l==1 && r==1) return 0;
        if(l==0 || r==0){
            res++;
            return 2;
        }
        return 1;
    }
}

相关推荐

  1. 贪心算法05leetcode435,763,56)

    2024-06-11 02:32:05       8 阅读
  2. 贪心算法03leetcode1005,134,135)

    2024-06-11 02:32:05       12 阅读
  3. 贪心算法Day06

    2024-06-11 02:32:05       25 阅读
  4. leetcode贪心算法介绍

    2024-06-11 02:32:05       26 阅读
  5. LeetCode——贪心算法

    2024-06-11 02:32:05       20 阅读
  6. 贪心算法day05

    2024-06-11 02:32:05       35 阅读
  7. 贪心算法day01

    2024-06-11 02:32:05       36 阅读
  8. 贪心算法Day02

    2024-06-11 02:32:05       44 阅读
  9. 贪心算法day03

    2024-06-11 02:32:05       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-11 02:32:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-11 02:32:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-11 02:32:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-11 02:32:05       20 阅读

热门阅读

  1. Python3 笔记:字符串的 zfill() 和 rjust()

    2024-06-11 02:32:05       11 阅读
  2. 中国自研的AI算力基建和服务的发展

    2024-06-11 02:32:05       12 阅读
  3. 设计模式七大原则-接口隔离原则InterfaceSegregation

    2024-06-11 02:32:05       9 阅读
  4. 单片机中的四种通信总线:UART、I2C、SPI、CAN

    2024-06-11 02:32:05       8 阅读
  5. c++手写的bitset

    2024-06-11 02:32:05       9 阅读
  6. 【系统学C++】二、从C语言到C++(二)

    2024-06-11 02:32:05       11 阅读
  7. 【仿真建模-anylogic】动态生成轨道网络

    2024-06-11 02:32:05       15 阅读
  8. mysql实现json数据的解析

    2024-06-11 02:32:05       9 阅读
  9. 【Python】高阶函数

    2024-06-11 02:32:05       10 阅读
  10. 优秀的程序员不是你的尽头,而是起点

    2024-06-11 02:32:05       11 阅读
  11. C++中的map容器详解

    2024-06-11 02:32:05       14 阅读