zoukankan      html  css  js  c++  java
  • 337. House Robber III

    小偷第三题

    /*
        一开始的想法是dfs先左树,然后右树在遍历完左树的基础上叠加,这么做的原因是一开始觉得左右孩子相互没有影响,但是后来
        做出来发现不对,才看出来左孩子是对右孩子有影响的,比如没用左孩子,用的父节点,这时候右孩子是用不了父节点的,所以
        遍历完左子树后,右边子树节点有的已经不能用了。
        看了看网上的答案,是用一个数组存取当前节点用和不用两种情况得到的结果
        先不管当前node用不用,把左右子树各自两种情况求出来,如果当前节点不用就直接判断大小相加,如果当前节点用,
        左右孩子就只能不用。
         */
        public int rob(TreeNode root) {
            int[] res =  dp(root);
            return Math.max(res[0],res[1]);
        }
        private int[] dp(TreeNode root)
        {
            if (root==null) return new int[2];
            int[] l = dp(root.left);
            int[] r = dp(root.right);
            int[] cur = new int[2];
            //不用当前节点
            cur[0] = Math.max(l[0],l[1]) + Math.max(r[0],r[1]);
            //用当前节点
            cur[1] = l[0] + r[0] + root.val;
            return cur;
        }

    list的add(index,val)方法相当于插入,要修改某个地方用set,这和map的put不一样,map的put之后就直接覆盖了。

  • 相关阅读:
    selective search生成.mat文件
    2014 百度之星 1003 题解 Xor Sum
    hdu 2544 最短路
    表解锁
    第 10 章 数据结构
    MySQL Study之--Percona Server版本号
    const 不再迷茫
    opecv2 MeanShift 使用均值漂移算法查找物体
    server用JDBC对mysql数据库进行操作
    Django Admin site 显示问题
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8372318.html
Copyright © 2011-2022 走看看