• leetcode 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.

    此题即是一个dfs,比较直接的想法,我用c++和java各写了一次,把代码贴过来,比较简单的想法,不做多余解释了

    c++:

    ass Solution {
    public:
        struct Money {
            int p;  
            int c; 
            Money():p(0), c(0){}
        };
     
        int rob(TreeNode* root) {
            Money sum = dfs(root);
            return sum.c;
        }
     
        Money dfs(TreeNode* root)
        {
            if (root == NULL) return Money();
            Money leftMoney = dfs(root->left);   
            Money rightMoney = dfs(root->right); 
            Money sumMoney;
            sumMoney.p = leftMoney.c + rightMoney.c; 
            sumMoney.c = max(sumMoney.p, root->val + leftMoney.p + rightMoney.p);
            return sumMoney;
        }
    };

    java:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        
    
        class Money {
            int p = 0;
            int c = 0;
        }
        
        static int max(int a,int b){
            if(a > b){
                return a;
            }else{
                return b;
            }
        }
        int rob(TreeNode root) {
            Money sum = dfs(root);
            return sum.c;
        }
     
        Money dfs(TreeNode root)
        {
            if (root == null) {
            Money money = new Money();
            return money;
            }
            Money leftMoney = dfs(root.left);   
            Money rightMoney = dfs(root.right); 
            Money sumMoney = new Money();
            sumMoney.p = leftMoney.c + rightMoney.c; 
            sumMoney.c = max(sumMoney.p, root.val + leftMoney.p + rightMoney.p);
            return sumMoney;
        }
    }
  • 相关阅读:
    【深度学习】吴恩达网易公开课练习(class1 week2)
    【深度学习】吴恩达网易公开课练习(class1 week3)
    【python】内存调试
    【python】threadpool的内存占用问题
    Druid: A Real-time Analytical Data Store
    Mesa: GeoReplicated, Near RealTime, Scalable Data Warehousing
    Presto: SQL on Everything
    The Snowflake Elastic Data Warehouse
    Guava 库
    Java Annotation
  • 原文地址:https://www.cnblogs.com/feary/p/5382811.html
Copyright © 2020-2023  润新知