zoukankan      html  css  js  c++  java
  • 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
      3
     / 
    2   3
         
      3   1
    

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

        3
       / 
      4   5
     /     
    1   3   1
    

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

    这题一开始用递归 结果超时;随机加cache变成DP。。通过了

    helper1表示抢root

    helper2表示不抢root;此处注意不抢root时 即可以抢root.left和root.right 也可以不抢它们 二取其一 所以注意42-47行

     
     1 /**
     2  * Definition of TreeNode:
     3  * public class TreeNode {
     4  *     public int val;
     5  *     public TreeNode left, right;
     6  *     public TreeNode(int x) { val = x; }
     7  * }
     8  */
     9 public class Solution {
    10     /**
    11      * @param root: The root of binary tree.
    12      * @return: The maximum amount of money you can rob tonight
    13      */
    14      Map<TreeNode, Integer> map1 = new HashMap<TreeNode, Integer>();
    15      Map<TreeNode, Integer> map2 = new HashMap<TreeNode, Integer>();
    16     public int houseRobber3(TreeNode root) {
    17         // write your code here
    18         if(root==null) return 0;
    19         return Math.max(helper1(root), helper2(root));
    20     }
    21     // include root
    22     private int helper1(TreeNode root){
    23         if(map1.containsKey(root)){
    24             return map1.get(root);
    25         }
    26         int sum = root.val;
    27         if(root.left!=null){
    28             sum += helper2(root.left);
    29         }
    30         if(root.right!=null){
    31             sum += helper2(root.right);
    32         }
    33         map1.put(root, sum);
    34         return sum;
    35     }
    36     // not include root
    37     private int helper2(TreeNode root){
    38         if(map2.containsKey(root)){
    39             return map2.get(root);
    40         }
    41         int sum = 0;
    42         if(root.left!=null){
    43             sum += Math.max(helper1(root.left), helper2(root.left));
    44         }
    45         if(root.right!=null){
    46             sum += Math.max(helper1(root.right), helper2(root.right));
    47         }
    48         map2.put(root, sum);
    49         return sum;
    50     }
    51 }
  • 相关阅读:
    创意吃鱼法
    雅礼上课
    坏掉的项链Broken Necklace
    2018-04-02练习
    【11月12日】Hadoop架构
    【11月10日】Redis 主从复制技术
    【11月10日】Redis 缓存系统常见问题及解决方案
    【11月9日】Redis 持久化
    【11月7日】Redis核心对象和数据类型
    【11月7日】Redis简介
  • 原文地址:https://www.cnblogs.com/xinqiwm2010/p/6835455.html
Copyright © 2011-2022 走看看