代碼隨想錄訓練營第39天 || 198. 打家劫舍 213. 打家劫舍 II 337. 打家劫舍 III

198. 打家劫舍

思路:

動規五部曲:

1.dp數組及其下標的意義:dp數組表示當前房屋下偷與不偷的最大盜取金額

2.確定遞推公式:因為盜取房屋只能間隔盜取,并且還要取最大值。所以每個房屋都有盜取和不盜取兩個選擇,盜不盜取取決于金額,所以遞推公式為dp[ i ] = max(dp[ i-1] (不盜取),dp[i-2 ]+nums[ i ](盜取))

3.dp數組的初始化:因為遞推公式要取最大盜取金額,同時金額都為非負數,所以初始化為最小值0

4.遍歷順序:從前往后

代碼:

class Solution {
public:int rob(vector<int>& nums) {vector<int> dp(nums.size(),0);if(nums.size() == 0)return 0;if(nums.size()==1)return nums[0];//一定不要忘了無法用遞推公式的情況//dp數組的初始化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];}
};

遇到的問題:

對于一開始如果nums的個數小于三,那么就無法應用遞推公式,需要手動判斷

213. 打家劫舍 II

思路:

此題與上一題不同的是,這次的家是環形的,而非線性。因為相鄰就不偷,所以第一個和最后一個只有一個可以偷,所以分兩種情況

1.dp數組及其下標的意義:

dp數組表示當前序號房屋下偷與不偷的最大盜取金額

2.確定遞推公式:

dp[ i ] = max(dp[ i-1] (不盜取),dp[i-2 ]+nums[ i ](盜取))

3.dp數組的初始化:因為遞推公式要取最大盜取金額,同時金額都為非負數,所以初始化為最小值0

4.遍歷順序:從前往后

代碼:

class Solution {
public:int rob(vector<int>& nums) {if(nums.size() == 0)return 0;if(nums.size()==1)return nums[0];int result1 = caozuo(nums,1,nums.size()-1);int result2 = caozuo(nums,0,nums.size()-2);return max(result1,result2);}int caozuo(vector<int>& nums ,int start,int end){if(start == end)return nums[start];vector<int> dp(nums.size(),0);//此處相當于復制了一個dp數組,因為start和end是原來的dp數組截取的下標,所以長度不能動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];//此處因為最后的值為end}
};

遇到的問題:

對于在分情況討論只有頭房子和尾房子時,處理dp數組的方式與不分情況是一樣的

337. 打家劫舍 III

思路:

1.dp數組的意義:dp數組下標為0記錄不偷該節點所得到的的最大金錢,下標為1記錄偷該節點所得到的的最大金錢。

2.中止條件:cur ==NULL遇到葉子節點

3.遍歷順序:因為是二叉樹,所以遍歷順序從前中后遍歷中選擇,選擇后序遍歷,因為當前節點偷不偷取決于子節點

代碼:

class Solution{
public:int rob(TreeNode* root) {//dp數組采用一個動態數組,內部只有兩個元素,0和1,vector<int> result = caozuo(root);return max(result[0],result[1]);}vector<int> caozuo(TreeNode* cur){if(cur == NULL)return {0,0};//后序遍歷//左vector<int>left = caozuo(cur->left);//右vector<int>right = caozuo(cur->right);//中//偷父節點int val1 = cur->val + left[0]+right[0];//不偷父節點int val2 = max(left[0],left[1]) + max(right[0] ,right[1]);return {val2,val1};//{ }是列表的初始化來賦值數組}
};

遇到的問題:

1. return {val2,val1};//{ }是列表的初始化來賦值數組

2.為什么選擇從下往上偷,第一可以使用遞歸函數的返回值,第二符合動態規劃的思路(重疊子問題,最優子結構)

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

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

相關文章

【AI 加持下的 Python 編程實戰 2_09】DIY 拓展:從掃雷小游戲開發再探問題分解與 AI 代碼調試能力(上)

DIY 拓展&#xff1a;從掃雷小游戲開發再探問題分解與 AI 代碼調試能力&#xff08;上&#xff09; 1 起因 最近在看去年剛出了第 2 版《Learn AI-assisted Python Programming》&#xff0c;梳理完 第七章 的知識點后&#xff0c;總感覺這一章的話題很好——問題分解能力的培…

使用DeepSeek-Prover-V1.5解決數學問題

DeepSeek-Prover-V1.5-RLRMaxTS是一個結合強化學習和搜索策略的自動定理證明系統。 1. 初等代數&#xff1a;二次方程求解 問題&#xff1a;解方程 x - 5x 6 0 操作步驟&#xff1a; 將問題轉換為Coq形式&#xff1a; Theorem quadratic : exists x : Z, x^2 - 5*x 6 0…

3.3 技術框架:LangChain、ReAct、Memory與Tool Integration

隨著人工智能技術的飛速發展&#xff0c;智能代理&#xff08;Agent&#xff09;已成為企業實現自動化、智能化和個性化服務的核心工具。在2025年&#xff0c;技術框架如LangChain、ReAct、Memory和Tool Integration在構建高效、靈活的AI代理系統中占據了重要地位。這些框架通過…

STM32F103 單片機(基于 ARM Cortex-M3 內核)的啟動過程涉及硬件初始化、固件配置和程序執行流程。

1. 啟動模式與地址映射 STM32F103 的啟動模式由 BOOT0 和 BOOT1 引腳配置決定&#xff0c;不同的啟動模式對應不同的存儲器映射&#xff1a; 啟動模式 映射地址范圍 說明 主 Flash 0x08000000~0x0807FFFF 用戶程序存儲在 Flash 中&#xff0c;復位后從 Flash 啟動&#xff08…

【C語言-選擇排序算法】實現對十個數進行排序

目錄 前言 一、選擇排序算法原理 二、選擇排序算法實現對十個數進行排序 三、代碼運行示例 四、選擇排序算法的時間復雜度和空間復雜度分析 五、選擇排序算法的優缺點 六、總結 前言 在計算機科學領域&#xff0c;排序算法是基石般的存在&#xff0c;它們就像是整理雜亂…

配置Intel Realsense D405驅動與ROS包

配置sdk使用 Ubuntu20.04LTS下安裝Intel Realsense D435i驅動與ROS包_realsense的驅動包-CSDN博客 中的方法一 之后不通過apt安裝包&#xff0c;使用官方的安裝步驟直接clone https://github.com/IntelRealSense/realsense-ros/tree/ros1-legacy 從這一步開始 執行完 這一步…

基于SpringBoot的中華詩詞文化分享平臺-項目分享

基于SpringBoot的中華詩詞文化分享平臺-項目分享 項目介紹項目摘要管理員功能圖會員功能圖系統功能圖項目預覽會員主頁面詩詞頁面發布問題回復評論 最后 項目介紹 使用者&#xff1a;管理員、會員 開發技術&#xff1a;MySQLJavaSpringBootVue 項目摘要 本文旨在設計與實現一…

ProxySQL 性能調優工具推薦

ProxySQL 的性能優化需結合?實時監控工具?與?自動化分析平臺?,以下為常用工具分類與推薦: 一、?內置診斷工具? ProxySQL Admin 接口? 通過內置管理表直接分析性能數據: sql Copy Code SELECT * FROM stats_mysql_query_digest; – 高頻查詢分析(執行次數、平均耗…

unity TEngine學習記錄3

上一篇講了怎么使用te框架&#xff0c;本篇主要學習的是UI&#xff0c;一個游戲百分之70%都是UI的展示效果&#xff0c;現在讓我們繼續打開te官網找到UI部分繼續學習。 ui創建以及加載 我們根據文檔首先打開命名規則界面,大家第一次看就知道這個是干啥的&#xff0c;你想使用此…

23種設計模式-創建型模式之單例模式(Java版本)

Java 單例模式&#xff08;Singleton Pattern&#xff09;詳解 &#x1f31f; 什么是單例模式&#xff1f; 單例模式確保一個類只有一個實例&#xff0c;并提供一個全局訪問點來訪問它。 &#x1f9e0; 使用場景 配置管理類&#xff08;如讀取配置文件&#xff09;日志工具類…

2025能源網絡安全大賽CTF --- Crypto wp

文章目錄 前言simpleSigninNumberTheory 前言 大半年以來寫的第一篇文章&#xff01;&#xff01;&#xff01; simpleSignin 題目&#xff1a; from Crypto.Util.number import * from gmpy2 import * import osflag bxxx p next_prime(bytes_to_long(os.urandom(128))…

加密與解密完全指南,使用Java實現

文章目錄 1. 加密基礎知識1.1 什么是加密&#xff1f;1.2 加密的歷史簡介1.2.1 古典加密1.2.2 現代加密的起源 1.3 加密的基本概念1.3.1 密碼學中的關鍵術語1.3.2 加密的基本原則 1.4 加密的分類1.4.1 對稱加密&#xff08;Symmetric Encryption&#xff09;1.4.2 非對稱加密&a…

十一、數據庫day03--SQL語句02

文章目錄 一、查詢語句1. 基本查詢2. 條件查詢2.1 ?較運算符&邏輯運算符2.2 模糊查詢2.3 范圍查詢2.4 判斷空 3. 其他復雜查詢3.1 排序3.2 聚合函數3.3 分組3.4 分頁查詢 二、回顧1. 使? Navicat ?具中的命令列2.命令?基本操作步驟 提示&#xff1a;以下是本篇文章正文…

Flowable 與 bpmn.io@7.0 完整集成示例 Demo

Flowable 與 bpmn.io7.0 完整集成示例 Demo 下面是一個完整的前后端集成示例&#xff0c;包含前端使用 bpmn.js 7.0 和與 Flowable 后端交互的實現。 1. 后端實現 (Spring Boot Flowable) 1.1 添加依賴 (pom.xml) <dependencies><!-- Spring Boot --><depe…

ROS2 安裝詳細教程,Ubuntu 22.04.5 LTS 64 位 操作系統

一、完整安裝流程&#xff08;推薦&#xff09; 1. 安裝依賴工具 sudo apt update && sudo apt install -y software-properties-common curl gnupg2 2. 添加 ROS 2 GPG 密鑰 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /…

STM32 基本GPIO控制

目錄 GPIO基礎知識 ?編輯IO八種工作模式 固件庫實現LED點燈 蜂鳴器 按鍵基礎知識 ?編輯繼電器 震動傳感器 433M無線模塊 GPIO基礎知識 GPIO(General-Purpose input/output,通用輸入/輸出接口) 用于感知外部信號&#xff08;輸入模式&#xff09;和控制外部設備&…

14.Chromium指紋瀏覽器開發教程之WebGL指紋定制

WebGL指紋概述 當在瀏覽器打開的網頁上瀏覽內容時&#xff0c;看到的大多是平面的、靜態的圖像和文字。但是有時想要在網頁上看到更加生動、立體的圖像&#xff0c;如3D游戲、虛擬現實應用等。這時&#xff0c;就需要用到WebGL。 簡單來說&#xff0c;WebGL&#xff08;Web G…

C# foreach 循環中獲取索引的完整方案

一、手動維護索引變量 ?實現方式?&#xff1a; 在循環外部聲明索引變量&#xff0c;每次迭代手動遞增&#xff1a; int index 0; foreach (var item in collection) { Console.WriteLine($"{index}: {item}"); index; } ?特點?&#xff1a; 簡單直接&#…

Android 下拉欄中的禁用攝像頭和麥克風隱藏

Android 下拉欄中的禁用攝像頭和麥克風隱藏 文章目錄 Android 下拉欄中的禁用攝像頭和麥克風隱藏一、前言二、下拉框中的禁用攝像頭和麥克風隱藏實現1、設置支持屬性為false2、修改代碼 三、其他1、下拉欄中的禁用攝像頭和麥克風隱藏小結2、 Android SensorPrivacyService ps&a…

數字后端設計 (四):時鐘樹綜合——讓芯片的「心跳」同步到每個角落

—— 試想全城的人要在同一秒按下開關——如果有的表快、有的表慢&#xff0c;結果會亂套&#xff01;時鐘樹綜合就是給芯片內部裝一套精準的“廣播對時系統”&#xff0c;讓所有電路踩著同一個節拍工作。 1. 為什么時鐘如此重要&#xff1f; 芯片的「心跳」&#xff1a;時鐘信…