zoukankan      html  css  js  c++  java
  • 337_House Robber III

    The thief has found himself a new place for his thievery again. There is only one entrance to this area, called the "root." Besides the root, each house has one and only one parent house. After a tour, the smart thief realized that "all houses in this place forms a binary tree". It will automatically contact the police if two directly-linked houses were broken into on the same night.

    Determine the maximum amount of money the thief can rob tonight without alerting the police.

    Example 1:

         3
        / 
       2   3
            
         3   1
    

    Maximum amount of money the thief can rob = 3 + 3 + 1 = 7.

    Example 2:

         3
        / 
       4   5
      /     
     1   3   1
    

    Maximum amount of money the thief can rob = 4 + 5 = 9.

    一个二叉树,不能取相邻的两个数,求可以取到的树之和的最大值

    rob[2]中 rob[0]代表rob节点所能得到的最大值,rob[1]代表从rob的子节点到叶子节点所能得到的最大值。用类似深度优先的遍历,动态规划得出结果

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     public int val;
     *     public TreeNode left;
     *     public TreeNode right;
     *     public TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public int Rob(TreeNode root) {
            return dfs(root)[0];
        }
        
        public int[] dfs(TreeNode root)
        {
            int[] rob = {0, 0};
            if(root != null)
            {
                int[] leftRob = dfs(root.left);
                int[] rightRob = dfs(root.right);
                rob[1] = leftRob[0] + rightRob[0];
                rob[0] =  System.Math.Max(rob[1], leftRob[1] + rightRob[1] + root.val);
            }
            return rob;
        }
    }
  • 相关阅读:
    nethogs 实时查看进程使用流量情况。
    Bash 使用技巧
    Linux源代码编译安装tree命令
    【字体区别】Serif和Sans Serif
    MySQL数据库恢复的经历。
    Linux常用命令
    关于一机多区的可行性分析。
    记一次node节点异常排查
    kube-prometheus部署
    认证、授权与准入控制
  • 原文地址:https://www.cnblogs.com/Anthony-Wang/p/5298978.html
Copyright © 2011-2022 走看看