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)));
    
        }
    }
    
  • 相关阅读:
    mysql分表那些事
    java根据经纬度计算距离
    java Calendar类的使用
    mysql中DATETIME、DATE和TIMESTAMP的区别
    java设计模式
    dubbo教程
    Java算法
    随机产生字符串
    js根据类名获取元素的底层原理
    元素样式的获取
  • 原文地址:https://www.cnblogs.com/lippon/p/14117700.html
Copyright © 2011-2022 走看看