网站开发工程师岗位要求新闻博客软文自助推广
网站开发工程师岗位要求,新闻博客软文自助推广,网络推广网站,新龙华网站建设文章目录题目描述思路 代码更新版题目描述
这年头当个小偷#xff0c;都得会 dp 和二叉树了和前面的 I II 有点不同#xff0c;这次直接换了数据结构#xff0c;写树来了。#xff08;之后不会是图吧#xff09;很厉害#xff0c;第一次接触到树型的dp…
文章目录题目描述思路 代码更新版题目描述
这年头当个小偷都得会 dp 和二叉树了和前面的 I II 有点不同这次直接换了数据结构写树来了。之后不会是图吧很厉害第一次接触到树型的dp一听就特别不同凡响
思路 代码
返回值分成两部分一个是当前 root 偷了的情况一个是没偷的情况状态转移方程、最优子结构、边界见代码时间复杂度 O(n)空间复杂度 O(n)
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val val;* this.left left;* this.right right;* }* }*/
class Solution {public int rob(TreeNode root) {// 0当前结点未取 1当前结点取了int[] result forRob(root);return Math.max(result[0], result[1]);}int[] forRob(TreeNode root){// 边界if(root null){return new int[2];}int[] result new int[2];// 最优子结构int[] right forRob(root.right);int[] left forRob(root.left);// 状态转移方程// root 没偷的情况左右结点可偷也可不偷result[0] Math.max(left[0], left[1]) Math.max(right[0], right[1]);// root 偷了的情况左右结点一定不偷result[1] root.val left[0] right[0];return result;}
}更新版
自底向上状态转移方程是重点思路可以看上面代码的注释。
class Solution {public int rob(TreeNode root) {int[] ans robTree(root);return Math.max(ans[0], ans[1]);}public int[] robTree(TreeNode root) {if(root null) {return new int[]{0, 0};}int[] left robTree(root.left);int[] right robTree(root.right);int[] now new int[2];now[0] Math.max(left[0], left[1]) Math.max(right[0], right[1]);now[1] root.val left[0] right[0];return now;}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88750.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!