• 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之后就直接覆盖了。

  • 相关阅读:
    oracle 11g 执行先决条件检查失败的解决方法
    Oracle 11g 详细安装步骤
    Github的使用
    Git的配置与基本操作
    Git安装教程(windows)
    robot framework 自动化框架环境搭建
    Windows下jenkins环境搭建
    Windows 下搭建 SVN服务器
    fiddler配置及使用教程
    逆序链表
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8372318.html
Copyright © 2020-2023  润新知