2022.01.06

阅读: 评论:0

2022.01.06

2022.01.06

文章目录

  • 1. 题目
  • 2. 思路
    • (1) 动态规划
  • 3. 代码

1. 题目


2. 思路

(1) 动态规划

  • 对于每个结点,需要维护其在三种状态下以该结点为根的树的摄像头数目:
    1. 状态a:root一定放置摄像头,且整棵树都被监控;
    2. 状态b:root不一定放置摄像头,且整棵树都被监控;
    3. 状态c:root不一定被监控,但左右子树被监控。
  • 显然,a>=b>=c,设其左右子树的状态变量为(la,lb,lc)和(ra,rb,rc),则:
    1. a=lc+rc+1;
    2. b=min(a,min(la+rb,lb+ra));
    3. c=min(a,lb+rb)。
  • 最终结果显然是根结点在状态b下的摄像头数目。

3. 代码

public class Test {public static void main(String[] args) {}
}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 {public int minCameraCover(TreeNode root) {return dfs(root)[1];}private int[] dfs(TreeNode root) {if (root == null) {return new int[]{Integer.MAX_VALUE / 2, 0, 0};}int[] left = dfs(root.left);int[] right = dfs(root.right);int[] res = new int[3];res[0] = left[2] + right[2] + 1;res[1] = Math.min(res[0], Math.min(left[0] + right[1], left[1] + right[0]));res[2] = Math.min(res[0], left[1] + right[1]);return res;}
}

本文发布于:2024-01-28 19:34:37,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064416829770.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23