運維面試經歷分享( 第 5 期 )
阿新 • • 發佈:2021-12-10
在上次打劫完一條街道之後和一圈房屋後,小偷又發現了一個新的可行竊的地區。這個地區只有一個入口,我們稱之為“根”。 除了“根”之外,每棟房子有且只有一個“父“房子與之相連。一番偵察之後,聰明的小偷意識到“這個地方的所有房屋的排列類似於一棵二叉樹”。 如果兩個直接相連的房子在同一天晚上被打劫,房屋將自動報警。
計算在不觸動警報的情況下,小偷一晚能夠盜取的最高金額。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/house-robber-iii
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
心之所向,素履以往 生如逆旅,一葦以航class Solution { private Info solve(TreeNode root) { if (root == null) { return new Info(0, 0); } Info left = solve(root.left); Info right = solve(root.right); int robMax = root.val + left.noRobMax + right.noRobMax; int noRobMax = Math.max(left.noRobMax, left.robMax) + Math.max(right.noRobMax, right.robMax); return new Info(robMax, noRobMax); } public int rob(TreeNode root) { if (root == null) { return 0; } Info info = solve(root); return Math.max(info.noRobMax, info.robMax); } } class Info { int robMax; int noRobMax; public Info(int robMax, int noRobMax) { this.robMax = robMax; this.noRobMax = noRobMax; } } 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; } }