腾讯面试:打家劫舍 III
生活随笔
收集整理的這篇文章主要介紹了
腾讯面试:打家劫舍 III
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
在上次打劫完一條街道之后和一圈房屋后,小偷又發現了一個新的可行竊的地區。這個地區只有一個入口,我們稱之為“根”。 除了“根”之外,每棟房子有且只有一個“父“房子與之相連。一番偵察之后,聰明的小偷意識到“這個地方的所有房屋的排列類似于一棵二叉樹”。 如果兩個直接相連的房子在同一天晚上被打劫,房屋將自動報警。
計算在不觸動警報的情況下,小偷一晚能夠盜取的最高金額。
示例 1:
輸入: [3,2,3,null,3,null,1]3-/ \2 3\ \ 3- 1-輸出: 7 解釋: 小偷一晚能夠盜取的最高金額 = 3 + 3 + 1 = 7.示例 2:
輸入: [3,4,5,1,3,null,1]3/ \4- 5-/ \ \ 1 3 1輸出: 9 解釋: 小偷一晚能夠盜取的最高金額 = 4 + 5 = 9.代碼:
class Solution { public:unordered_map <TreeNode*, int> f, g;void dfs(TreeNode* o) {if (!o) {return;}dfs(o->left);dfs(o->right);f[o] = o->val + g[o->left] + g[o->right];g[o] = max(f[o->left], g[o->left]) + max(f[o->right], g[o->right]);}int rob(TreeNode* o) {dfs(o);return max(f[o], g[o]);} };?
代碼是先遞歸在求dp方程,遞歸一直遞歸到底部,然后dp方程從底部一直往上求值,類似一個彈棧過程
?
?
參考地址:https://leetcode-cn.com/problems/house-robber-iii/solution/da-jia-jie-she-iii-by-leetcode-solution/
?
總結
以上是生活随笔為你收集整理的腾讯面试:打家劫舍 III的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员笑话十九
- 下一篇: 腾讯面试:比特位计数