代碼隨想錄算法訓練營第五十天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

代碼隨想錄算法訓練營第五十天

198.打家劫舍

題目鏈接:198.打家劫舍

  1. 確定dp數組以及下標的含義:dp[i]:考慮下標i(包括i)以內的房屋,最多可以偷竊的金額為dp[i]。
  2. 確定遞推公式:max(dp[i - 1], dp[i - 2] + nums[i]);,不偷當前節點和偷當前節點哪個獲利最大就取哪個
  3. dp數組如何初始化:dp[0]=nums[0],只有一個必須偷。dp[1]=max(nums[0],nums[1])一共2個元素,只能偷一個最大的
  4. 確定遍歷順序:從前向后遍歷。
  5. 打印dp數組。
class Solution {
public:int rob(vector<int>& nums) {if (nums.size() == 1)return nums[0];vector<int> dp(nums.size(), 0);dp[0] = nums[0];dp[1] = max(nums[0], nums[1]);for (int i = 2; i < nums.size(); i++) {dp[i] = max(dp[i - 1], dp[i - 2] + nums[i]);}return dp[nums.size() - 1];}
};

213.打家劫舍II

題目鏈接:213.打家劫舍II
偷第一家就不能偷最后一家,偷最后一家就不能偷第一家,分別將兩種狀態求出,再從二者之間找最大值。兩種情況分別可以用上題方法求解。

class Solution {
public:int Rob(vector<int>& nums,int start, int end){if(start==end)return nums[start];vector<int> dp(nums.size(), 0);dp[start] = nums[start];dp[start+1] = max(nums[start], nums[start+1]);for (int i = start+2; i <= end; i++) {dp[i] = max(dp[i - 1], dp[i - 2] + nums[i]);}return dp[end];}int rob(vector<int>& nums) {if(nums.size()==1)return nums[0];int first = Rob(nums,0,nums.size()-2);int last = Rob(nums, 1, nums.size()-1);return max(first,last);}
};

337.打家劫舍III

題目鏈接:337.打家劫舍III
dp數組表示,每個節點偷當前節點和不偷當前節點可以取得的最大價值。要求當前節點值需要知道左右節點的值,所以是后序遍歷。最后再偷根節點和不偷根節點之間取一個最大值即可。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<int> Rob(TreeNode* cur){if(cur==nullptr)return {0,0};vector<int> left = Rob(cur->left);vector<int> right = Rob(cur->right);vector<int>dp(2);//定義一個dp數組dp[0]表示當前節點不偷可以獲得的最大金幣,dp[1]表示偷當前節點可以獲得的最大金幣dp[0] = max(left[0],left[1])+max(right[0],right[1]);//不偷當前節點,那它的子節點可以選擇偷或者不偷,左子偷不偷選最大的+右子偷不偷選最大的dp[1] = left[0]+right[0]+cur->val;//偷當前節點,左右子都不能偷,所以等于左不偷+右不偷+當前節點的值return dp;}int rob(TreeNode* root) {return max(Rob(root)[0],Rob(root)[1]);}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/22820.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/22820.shtml
英文地址,請注明出處:http://en.pswp.cn/web/22820.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開個新專欄,叫吾日三醒吾身,這個我打算得到了感悟就更新

打算開個新專欄&#xff0c;還有4年就30歲了。人生如夢啊&#xff0c;過的真快&#xff0c;家里的寶寶也還有2個月就出生了&#xff0c;都快要當父親啦&#xff0c;感覺這輩子還沒做啥很牛的事情。所以就立個flag吧。 自考還沒考過&#xff0c;就3門了&#xff0c;考了3年了&a…

阻性負載和感性負載的區別

1.阻性負載&#xff1a; 阻性負載是指電路中只包含電阻元件的情況。這種負載會使得電流與電壓之間呈現出線性關系&#xff0c;即滿足歐姆定律。 當負載電流負載電壓沒有相位差時負載為阻性(如負載為白熾燈、電爐)。 2.感性負載&#xff1a; 感性負載指的是電路中含有電感元…

SVN在Linux服務器下部署過程

svn server 基于 ubuntu22.04 的 svn server 安裝 refer&#xff1a;https://developer.aliyun.com/article/1431862#:~:text%E5%A6%82%E4%BD%95%E5%9C%A8Ubuntu%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AESVN%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%B9%B6%E5%AE%9E%E7%8E%B0%E6%97%A0%E5…

ARM功耗管理之功耗狀態及功耗模式

安全之安全(security)博客目錄導讀 目錄 一、功耗狀態定義 ?編輯二、功耗模式定義 三、功耗狀態和功耗模式區別<

6月05日,每日信息差

第一、特斯拉在碳博會上展示了其全品類的可持續能源解決方案&#xff0c;包括首次在國內展出的超大型電化學商用儲能系統 Megapack 和家庭儲能系統 Powerwall。此外&#xff0c;特斯拉還展示了電動汽車三電系統的解構和電池回收技術產品 第二、2024 年第一季度&#xff0c;全球…

用增之Appsflyer(一)

目錄 簡介 一、Appsflyer開發 指南 二、SDK集成 注意點: 代碼部分: Step 1:代碼倉庫配置 Step 2:添加依賴項 Step 3:添加權限 Step 4:添加混淆 Step 5:facebook兼容 Step 6:java代碼部分 1、初始化 一、AppsFlyerConversionListener

免費開源圖片轉文字識別軟件:Umi-OCR

目錄 1.介紹 2.項目亮點 3.項目功能&#xff08;已實現&#xff09; 4.功能體驗 5.項目集成&#xff08;調用接口&#xff09; 6.項目地址 1.介紹 Umi-OCR&#xff1a;免費&#xff0c;開源&#xff0c;可批量的離線OCR軟件&#xff0c;目前適用于 Windows7 x64 及以上。…

自動化辦公02 用openpyxl庫操作excel.xlsx文件(新版本)

目錄 一、文件讀操作 二、文件寫操作 三、修改單元格樣式 openpyxl 是一個處理Excel表格的第三方庫。openpyxl 庫可以處理Excel2010以后的電子表格格式&#xff0c;包括&#xff1a;xlsx/xlsm/xltx/xltm。 openpyxl教程 一、文件讀操作 工作簿(workbook): excel文件 工作表…

word自帶公式編輯器技巧

1.實現多行公式換行且對齊 1.1 準備階段&#xff08;默認Unicode模式&#xff09; 進入公式編輯模式&#xff0c;輸入\eqarray&#xff0c;緊接著按下空格鍵輸入空格&#xff0c;如下 1.2 實現換行和對齊 將要編輯的公式輸入到括號內 &&#xff1a;實現位置對齊 &…

104.網絡游戲逆向分析與漏洞攻防-裝備系統數據分析-篩選與裝備有關的數據包

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 如果看不懂、不知道現在做的什么&#xff0c;那就跟著做完看效果&#xff0c;代碼看不懂是正常的&#xff0c;只要會抄就行&#xff0c;抄著抄著就能懂了 內容…

【Android】PopupWindow焦點控制方式解析

touchable 指定pop是否可觸摸 當設置為false時&#xff0c;pop的所有觸摸事件會直接傳到下方Window&#xff0c;pop會關閉 focusable 指定pop是否可獲得焦點 當設置為true時&#xff0c;如果pop中包含可獲取焦點的控件&#xff0c;舊的Window會自動失去焦點 另外&#xf…

postman教程-15-前置腳本

上一小節我們學習了Postman生成隨機數的方法&#xff0c;本小節我們講解一下Postman前置腳本的使用方法。 Postman中的前置腳本&#xff08;Pre-request Script&#xff09;允許你在發送請求之前運行JavaScript代碼。這可以用于修改請求頭、查詢參數、請求體等&#xff0c;或者…

合作伙伴中心是什么?

目錄 合作伙伴中心介紹 合作伙伴中心的功能 合作伙伴中心介紹 合作伙伴中心,作為Microsoft合作伙伴與Microsoft及其客戶之間關系管理的重要工具,為合作伙伴提供了簡化業務流程的便利。通過合作伙伴中心,合作伙伴可以輕松地管理Microsoft賬戶和用戶,與客戶互動,建立與其他…

web學習筆記(六十二)

目錄 1.鍵盤事件 2.KeepAlive 3.組件傳值 3.1 兄弟組件傳值 3.2 組件樹傳值 3.3 發布訂閱者傳值 1.鍵盤事件 keydown表示鍵盤事件&#xff0c;在不加修飾符的情況下&#xff0c;點擊鍵盤上的任意位置都可以觸發鍵盤事件&#xff0c; <template><div><!--…

word 無法自動檢測拼寫

word 有時候不能分辨是哪種語言,比如把英語錯認為法語 。 例如&#xff1a;Interlaayer spacace,發現誤認為是法語。 1、選中Interlaayer spacace 2、點擊語言下拉按鈕 選擇設置校對語言 發現校對語言為法語 3、手動修改校對語言為英語&#xff0c;并點擊確認。 4、發現現…

什么是 Batch Normalization 批標準化和全連接層

Batch Normalization 神經元在經過激活函數之后會處于飽和狀態&#xff0c;無論后續怎么變化都不會再起作用。 每一層都會進行batch normalization的處理&#xff01; without normalization 會導致數據分布再飽和區 全連接層&#xff1a; 全連接層(fully connected layers&a…

十四、返回Insert操作自增索引值

分為兩部分&#xff0c;解析初始化和使用 拿含有selectkey標簽的insert語句解析來說 解析部分 1.解析時看有沒有selectkey標簽&#xff0c;有的話先解析selectkey的內容&#xff0c;包括對其SQL的解析并封裝成一個MappedStatement和創建KeyGenerator放入configuration中 2.解…

SpringBoot集成ClickHouse,含集成kerberos認證

需求&#xff1a;項目中要使用ClickHouse做數據庫。 具體實現&#xff1a; 1&#xff0c;在pom.xml中添加clickhouse依賴 <!-- https://mvnrepository.com/artifact/com.clickhouse/clickhouse-jdbc --> <dependency><groupId>com.clickhouse</groupId&g…

SpringBoot前端URL訪問本地磁盤文件

SpringBoot前端通過 URL訪問本地磁盤文件&#xff0c;其實就是 SpringBoot訪問web中的靜態資源的處理方式。 SpringBoot 訪問web中的靜態資源&#xff1a;https://blog.csdn.net/qq_42402854/article/details/90295079 首先&#xff0c;我們知道瀏覽器訪問本地磁盤文件的方式為…

LLM的基礎模型5:Embedding模型

大模型技術論文不斷&#xff0c;每個月總會新增上千篇。本專欄精選論文重點解讀&#xff0c;主題還是圍繞著行業實踐和工程量產。若在某個環節出現卡點&#xff0c;可以回到大模型必備腔調或者LLM背后的基礎模型新閱讀。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;則提…