leetcode 198. House Robber

本題是動態規劃問題。

第一步,明確并理解dp數組以及下標的含義

dp[i]表示從第0號房間一直到第i號房間(包含第i號房間)可以偷到的最大金額,具體怎么偷這里不考慮,第i+1號及之后的房間也不考慮。換句話說,dp[i]也就是只考慮[0,i]號房間,無論怎么偷可以偷到的最大金額。

按照這個定義,dp[n-1]就是答案。需要注意的是,dp[i]一定能求到值,不代表一定是偷了第i號房間才求得dp[i]。

第二步,明確并理解遞推公式

考慮第i號房間,只有兩種可能,偷或者不偷。

偷第i號房間,則第i-1號房間肯定不能偷,此時能獲得的總金額為dp[i] = dp[i-2] + nums[i]。

不偷第i號房間,此時dp[i]應該等于dp[i-1]。

第三步,理解dp數組如何初始化

dp[0]應該初始化為第0號房間的金額。因為只有一間房的時候,能偷到的最大金額顯然就是把它偷了。

dp[1],含義是從第0號房間和第1號房間偷,能偷到的最大金額。由于相鄰的房間不能都偷,所以dp[1]= max(nums[0],numd[1]);

i>=2的dp[i]可以不初始化,或者說無論初始化為多大都沒關系,因為dp[i]只和dp[i-1],dp[i-2],nums[i]有關系。

第四步,理解遍歷順序

因為dp[i]依賴于它前面的dp[i-1]和dp[i-2],所以i的遍歷順序肯定要從小到大。

代碼

按照上面的思路,先初始化dp[0]和dp[1],再讓i從2開始遍歷,含義更加明確,代碼更好理解,如下所示:

class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();//dp[i]表示從第0號房間一直到第i號房間(包含第i號房間)可以偷到的最大金額。//按照這個定義,dp[n-1]就是答案vector<int> dp(n);dp[0] = nums[0];if(n < 2)return dp[0];dp[1] = max(nums[0],nums[1]);for(int i = 2;i < n;i++){//偷第i號房間int temp1 = dp[i-2] + nums[i];//不偷第i號房間int temp2 = dp[i-1];dp[i] = max(temp1,temp2);}return dp[n-1];}
};

但實際上,也可以不初始化讓i從0開始遍歷,代碼如下所示:

class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();//dp[i]表示從第0號房間一直到第i號房間(包含第i號房間)可以偷到的最大金額。//按照這個定義,dp[n-1]就是答案vector<int> dp(n);for(int i = 0;i < n;i++){//偷第i號房間int temp1 = (i >= 2 ? dp[i-2]:0) + nums[i];//不偷第i號房間int temp2 = i >= 1 ? dp[i-1]:0;dp[i] = max(temp1,temp2);}return dp[n-1];}
};

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

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

相關文章

掌趣科技前端面試題及參考答案

你使用 Vue 的頻率如何,用得比較多嗎? 在前端開發工作中,我對 Vue 的使用較為頻繁。Vue 作為一款輕量級、易于上手且功能強大的前端框架,在眾多項目里都發揮著重要作用。 在日常的項目里,Vue 的組件化開發特性為我帶來了極大的便利。組件化能夠將頁面拆分成多個小的、可復…

深入解析Python爬蟲技術:從基礎到實戰的功能工具開發指南

一、引言:Python 爬蟲技術的核心價值 在數據驅動的時代,網絡爬蟲作為獲取公開數據的重要工具,正發揮著越來越關鍵的作用。Python 憑借其簡潔的語法、豐富的生態工具以及強大的擴展性,成為爬蟲開發的首選語言。根據 Stack Overflow 2024 年開發者調查,68% 的專業爬蟲開發者…

CSS 筆記——Flexbox(彈性盒布局)

目錄 1. Flex 容器與 Flex 項目 2. 主軸與交叉軸 3. Flex 容器的屬性 display flex-direction justify-content align-items align-content flex-wrap 4. Flex 項目的屬性 flex-grow flex-shrink flex-basis flex align-self 5. Flexbox 的優點 6. Flexbox 的…

Java學習手冊:Java反射與注解

Java反射&#xff08;Reflection&#xff09;和注解&#xff08;Annotation&#xff09;是Java語言中兩個強大的特性&#xff0c;它們在框架開發和復雜應用中扮演著重要角色。反射允許程序在運行時檢查和操作類、對象、接口、字段和方法&#xff0c;而注解則提供了一種元數據形…

JavaWeb遇到的問題匯總

問題一&#xff1a;&#xff08;鍵值對最后一項沒有逗號&#xff09; 在JSON字符串轉自定義對象和自定義對象轉JSON字符串時&#xff1a; 如圖所示&#xff1a;若忘記刪除鍵值對的最后一項沒有逗號時&#xff0c;則下一句轉換不會生效&#xff0c;應該刪除最后一項的逗號。 解…

模板引擎語法-變量

模板引擎語法-變量 文章目錄 模板引擎語法-變量&#xff08;一&#xff09;在Django框架模板中使用變量的代碼實例&#xff08;二&#xff09;在Django框架模板中使用變量對象屬性的代碼實例&#xff08;三&#xff09;在Django框架模板中使用變量顯示列表 &#xff08;一&…

AUTO-RAG: AUTONOMOUS RETRIEVAL-AUGMENTED GENERATION FOR LARGE LANGUAGE MODELS

Auto-RAG&#xff1a;用于大型語言模型的自主檢索增強生成 單位&#xff1a;中科院計算所 代碼&#xff1a; https://github.com/ictnlp/Auto-RAG 擬解決問題&#xff1a;通過手動構建規則或者few-shot prompting產生的額外推理開銷。 貢獻&#xff1a;提出一種以LLM決策為中…

Python 基礎語法匯總

Python 語法 │ ├── 基本結構 │ ├── 語句&#xff08;Statements&#xff09; │ │ ├── 表達式語句&#xff08;如賦值、算術運算&#xff09; │ │ ├── 控制流語句&#xff08;if, for, while&#xff09; │ │ ├── 定義語句&#xff08;def…

一文詳解ffmpeg環境搭建:Ubuntu系統ffmpeg配置nvidia硬件加速

在Ubuntu系統下安裝FFmpeg有多種方式,其中最常用的是通過apt-get命令和源碼編譯安裝。本文將分別介紹這兩種方式,并提供安裝過程。 一、apt-get安裝 使用apt-get命令安裝FFmpeg是最簡單快捷的方式,只需要在終端中輸入以下命令即可: # 更新軟件包列表 sudo apt-get updat…

Android 14 、15動態申請讀寫權限實現 (Java)

在 Android 14、15 中&#xff0c;Google 進一步優化了存儲權限系統&#xff0c;特別是寫權限的管理。以下是完整的 Java 實現方案&#xff1a; 1. AndroidManifest.xml 聲明權限 <!-- Android 14 存儲權限 --> <uses-permission android:name"android.permiss…

小剛說C語言刷題——第23講 字符數組

前面&#xff0c;我們學習了一維數組和二維數組的概念。今天我們學習一種特殊的數組&#xff0c;字符數組。 1.字符數組的概念 字符數組就是指元素類型為字符的數組。字符數組是用來存放字符序列或者字符串的。 2.字符數組的定義及語法 char ch[5]; 3.字符數組的初始化及賦…

用AI生成系統架構圖

DeepSeek+Drawio+SVG繪制架構圖-找到一種真正可行實用的方法和思路 1、使用DeepSeek生成SVG文件,導入drawio工具的方法 ?? 問題根源分析 錯誤現象: ? 導入時報錯包含 data:image/SVG;base64 和 %20 等 URL 編碼字符 ? 代碼被錯誤轉換為 Base64 格式(適用于網頁嵌入,但…

免費干凈!付費軟件的平替款!

今天給大家分享一款超棒的電腦錄屏軟件&#xff0c;簡直不要太好用&#xff01;它的界面特別干凈&#xff0c;沒有一點兒廣告&#xff0c;看起來特別清爽。 電腦錄屏 無廣告的錄屏軟件 這個軟件超方便&#xff0c;根本不用安裝&#xff0c;打開就能直接用。 它功能也很強大&am…

【XCP實戰】AUTOSAR架構下XCP從0到1開發配置實踐

目錄 前言 正文 1.CAN功能開發 1.1 DBC的制作及導入 1.2 CanTrcv模塊配置 1.3 Can Controller模塊配置 1.4 CanIf模塊配置 2.XCP模塊集成配置配置 2.1.XCP模塊配置 2.2.XCP模塊的Task Mapping 2.3.XCP模塊的初始化 3.在鏈接文件中定義標定段 4.編寫標定相關的測試…

Vitis: 使用自定義IP時 Makefile錯誤 導致編譯報錯

參考文章: 【小梅哥FPGA】 Vitis開發中自定義IP的Makefile路徑問題解決方案 Vitis IDE自定義IP Makefile錯誤&#xff08;arm-xilinx-eabi-gcc.exe: error: *.c: Invalid argument&#xff09;解決方法 Vitis 使用自定義IP時: Makefile 文件里的語句是需要修改的&#xff0c;…

Python中NumPy的統計運算

在數據分析和科學計算領域&#xff0c;Python憑借其豐富的庫生態系統成為首選工具之一&#xff0c;而NumPy作為Python數值計算的核心庫&#xff0c;憑借其高效的數組操作和強大的統計運算功能&#xff0c;廣泛應用于機器學習、信號處理、統計分析等場景。本文將系統介紹NumPy在…

C語言程序環境和預處理詳解

本章重點&#xff1a; 程序的翻譯環境 程序的執行環境 詳解&#xff1a;C語言程序的編譯鏈接 預定義符號介紹 預處理指令 #define 宏和函數的對比 預處理操作符#和##的介紹 命令定義 預處理指令 #include 預處理指令 #undef 條件編譯 程序的翻譯環境和執行環…

智能工廠調度系統設計方案研究報告

一、系統架構設計 1.1 物理部署架構 設備層&#xff1a;部署大量搭載多傳感器陣列的 AGV 智能循跡車&#xff0c;這些傳感器包括激光雷達、視覺相機、超聲波傳感器等&#xff0c;用于感知周圍環境信息&#xff0c;實現自主導航與避障功能&#xff1b;在每個工序節點處設置 RF…

全新突破 | 更全面 · 更安全 · 更靈活

xFile 高可用存儲網關 2.0 重磅推出&#xff0c;新增多空間隔離功能從根源上防止數據沖突&#xff0c;保障各業務數據的安全性與獨立性。同時支持 NFS、CIFS、FTP 等多種主流文件協議&#xff0c;無需繁瑣的數據拷貝轉換&#xff0c;即可與現有系統無縫對接&#xff0c;降低集成…

C# js 判斷table中tr否存在相同的值

html 中如&#xff1a; 實現&#xff1a;table數據表格中&#xff0c;點擊刪除按鈕時&#xff0c;驗證相同子訂單號條數是否大于1&#xff0c;大于允許刪除。保證數據表格中只有唯一的一條子訂單號數據。 <table style"width: 100%; background-color: #fff;" ce…