zoukankan      html  css  js  c++  java
  • 算法——打家劫舍问题

    树状排列问题
    链接: leetcode.

    解题思路:动态规划,利用两个哈希表,一个表示偷当前节点,另一个表示不透当前节点的最大收益。状态转移,偷当前节点的状态,由两个子节点的不偷状态加上当前节点值组成,不偷当前节点的状态,由不偷或者偷子节点的最大值转化过来。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        Map<TreeNode, Integer> f = new HashMap<>(), g = new HashMap<>();
        public int rob(TreeNode root) {
            dfs(root);
    
            return Math.max(f.getOrDefault(root, 0), g.getOrDefault(root, 0));
        }
    
        public void dfs(TreeNode root) {
            if(root == null) return;
    
            dfs(root.left);
            dfs(root.right);
    
            f.put(root, root.val + g.getOrDefault(root.left, 0) + g.getOrDefault(root.right, 0));
            g.put(root, Math.max(f.getOrDefault(root.left, 0), g.getOrDefault(root.left, 0)) + 
            Math.max(f.getOrDefault(root.right, 0), g.getOrDefault(root.right, 0)));
    
        }
    }
    
  • 相关阅读:
    Spring MVC
    Hibernate的状态
    设计模式
    Git在Eclipse中的使用
    深入理解Node.js基于事件驱动的回调
    nodejs核心技术
    webpack使用
    vue各种实例集合
    vue之component
    axios详解
  • 原文地址:https://www.cnblogs.com/lippon/p/14117700.html
Copyright © 2011-2022 走看看