zoukankan      html  css  js  c++  java
  • 337. 打家劫舍 III

    题目

    337. 打家劫舍 III

    我的思路

    比较明显的动态规划
    后序遍历:
        当前节点作为根节点的最大和 = 左子树
        maxSum(root) = max{maxSum(root.left)+maxSum(root.left),root.val+maxSum(root.left.left)...}

        使用递归?空间复杂度3logn,时间复杂度n

    我的实现

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<int> PostSearchRob(TreeNode *root)
        {
            if(root==NULL)
            {
                //vector<int> zeros(3,0);
                return  vector<int>(3,0);
            }
            vector<int> leftVals = PostSearchRob(root->left);
            vector<int> rightVals = PostSearchRob(root->right);
            vector<int> myVals(3);
            myVals[1] = leftVals[0];
            myVals[2] = rightVals[0];
            myVals[0] = max(myVals[1]+myVals[2],root->val+leftVals[1]+leftVals[2]+rightVals[1]+rightVals[2]);
            return myVals;
        }
        int rob(TreeNode* root) {
            vector<int> robResults = PostSearchRob(root);
            return max(robResults[0],robResults[1]+robResults[2]);
    
        }
    };
    /*
    比较明显的动态规划
    后序遍历:
        当前节点作为根节点的最大和 = 左子树
        maxSum(root) = max{maxSum(root.left)+maxSum(root.left),root.val+maxSum(root.left.left)...}
    
        使用递归?空间复杂度3logn,
    */

    拓展学习

    官方题解中用哈希表存储

  • 相关阅读:
    JAVA算术运算符
    java框架
    面向对象DAO模式
    JAVA JDK配置
    集合框架
    异常
    centos 部署 aspnetMVC 网页
    SQL四种语言:DDL,DML,DCL,TCL 的区别
    javascript download geoserver layer as kml file
    常用协议 —— hessian://
  • 原文地址:https://www.cnblogs.com/BoysCryToo/p/13438936.html
Copyright © 2011-2022 走看看