算法-每日一題(DAY10)打家劫舍

1.題目鏈接:

198. 打家劫舍 - 力扣(LeetCode)

2.題目描述:

你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警

給定一個代表每個房屋存放金額的非負整數數組,計算你?不觸動警報裝置的情況下?,一夜之內能夠偷竊到的最高金額。

示例 1:

輸入:[1,2,3,1]
輸出:4
解釋:偷竊 1 號房屋 (金額 = 1) ,然后偷竊 3 號房屋 (金額 = 3)。偷竊到的最高金額 = 1 + 3 = 4 。

示例 2:

輸入:[2,7,9,3,1]
輸出:12
解釋:偷竊 1 號房屋 (金額 = 2), 偷竊 3 號房屋 (金額 = 9),接著偷竊 5 號房屋 (金額 = 1)。偷竊到的最高金額 = 2 + 9 + 1 = 12 。

提示:

1 <= nums.length <= 100
0 <= nums[i] <= 400

3.解題思路:

該問題采用動態規劃解決,核心狀態轉移方程為:

dp[i]=max?(dp[i?1],dp[i?2]+nums[i])

dp[i] 表示前 i個房屋的最大偷竊金額

dp[i?1] 表示不偷第 i?間房屋時的最大收益

dp[i?2]+nums[i] 表示偷第 i?間房屋時的收益(需跳過前一間)

通過空間優化,代碼用三個變量替代完整的 DP 數組:

  1. pas:存儲 dp[i?2](前兩間的最優解)

  2. pre:存儲 dp[i?1](前一間的最優解)

  3. tem:臨時保存狀態(用于更新)

我們采用了動態規劃的思路,通過不斷更新每間房屋可以偷盜的最大金額,來解決“打家劫舍”問題。首先,判斷如果沒有房屋,則返回 0;如果只有一間房屋,則返回該房屋的金額。然后,定義兩個變量 pas 和 pre,分別代表第 i-2 間房屋和第 i-1 間房屋的最大偷盜金額,并初始化這兩個變量。接著,從第三間房屋開始,逐步計算每一間房屋的最大偷盜金額。對于每間房屋,判斷偷或者不偷當前房屋,通過 pre 和 pas 來計算當前最大偷盜金額。具體來說,偷當前房屋時的金額是 pas + nums[i](即前兩間房屋的偷盜金額之和);不偷當前房屋時,金額是 pre。更新 pre 和 pas,直到遍歷完所有房屋。最終返回 pre,即最大偷盜金額。

4.題解代碼:

class Solution {
public:int rob(vector<int>& nums){if (nums.empty())return 0;//如果沒有房屋,則偷盜金額返回0if (nums.size() == 1)return nums[0];//如果只有一間房屋,則偷盜金額返回這間房屋的金額int pas = nums[0];//定義一個pas,代表第 i-2 間房屋的最大偷竊金額,初始化為第一間房屋的偷盜金額int pre = max(nums[0], nums[1]);//定義一個pre,代表第 i-1 間房屋的最大偷竊金額,初始化為前兩間房屋的最大值int tem = 0;//定義一個tem,作為臨時值儲存當前prefor (int i = 2; i < nums.size(); i++){tem = pre;//儲存pre的值pre = max(pre, pas + nums[i]); //選擇偷或者不偷當前房屋pas = tem;//將pas更新為之前的pre}return pre;//返回最大偷盜金額}
};

5.示例演算:

輸入數組:[2, 7, 9, 3, 1]

步驟當前房屋(i)nums[i]操作pas 值pre 值計算邏輯
初始---27-
129tem = pre
pre = max(7, 2+9)
pas = tem
711max?(7,2+9)=11
233tem = pre
pre = max(11, 7+3)
pas = tem
1111max?(11,7+3)=11
341tem = pre
pre = max(11, 11+1)
pas = tem
1112max?(11,11+1)=12

6.復雜度計算:

時間復雜度:它通過一次遍歷處理每個房屋的金額,故時間復雜度是O(n)

空間復雜度:只使用了常數數量的額外變量,故空間復雜度為O(1)

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

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

相關文章

android UI 布局

一&#xff1a;約束布局 參考&#xff1a; 【約束布局】ConstraintLayout 約束布局 ( 簡介 | 引入依賴 | 基本操作 | 垂直定位約束 | 角度定位約束 | 基線約束 )_韓曙亮-2048 AI社區 以下是一個基于 ConstraintLayout 的簡單 Android 示例&#xff0c;包含三個控件&#xff0…

【K8S】詳解Labels?? 和 ??Annotations

在 Kubernetes&#xff08;K8s&#xff09;中&#xff0c;??Labels&#xff08;標簽&#xff09;?? 和 ??Annotations&#xff08;注解&#xff09;?? 都是用于為資源對象&#xff08;如 Pod、Service、Deployment&#xff09;附加元數據的機制&#xff0c;但它們在設計…

系統模塊編程與實現

設備類&#xff08;Device Class&#xff09;?? 和 ??設備節點&#xff08;Device Node&#xff09;??是深入 Linux 設備管理和驅動模型的核心基礎。它們就像“骨骼”與“門戶”&#xff0c;共同構建了 Linux 與硬件交互的核心橋梁。 一、設備類與設備節點 1. ??設備…

視頻壓縮、碼率與流媒體傳輸知識總結

&#x1f3a5; 視頻壓縮、碼率與流媒體傳輸知識總結 本筆記整理了 I/P/B 幀結構、碼率計算、文件大小估算、壓縮格式對比、推流帶寬建議等視頻工程常見技術要點。 一、單幀與未壓縮視頻數據量估算 分辨率&#xff1a;19201080&#xff08;1080p&#xff09; 色深&#xff1a;…

嵌入式C++學習路線

&#x1f680; 嵌入式C學習路線圖 從C語言基礎到嵌入式C高手的完整路徑 &#x1f4cb; 學習進度追蹤 總體目標&#xff1a; 20-26周完成全部學習內容 前置條件&#xff1a; C語言基礎 STM32開發經驗 學習方式&#xff1a; 理論學習 實踐項目 階段1: C基礎過渡 (2-3周) 目標…

VSCode1.101.1Win多語言語言編輯器便攜版安裝教程

軟件下載 【名稱】&#xff1a; VSCode1.101.1 【大小】&#xff1a; 120M 【語言】&#xff1a; 簡體中文 【安裝環境】&#xff1a; Win10/Win11 【迅雷網盤下載鏈接】&#xff08;務必手機注冊&#xff09;&#xff1a; 迅雷 【網站下載鏈接】: 其他網盤 軟件介紹 VSCod…

ssh 服務和 rsync 數據同步

目錄 一、ssh服務 1、概述 2、命令解析 遠程登錄命令 遠程拷貝命令 3、登錄方式配置 1、用戶名密碼登錄 2、公鑰驗證登錄 二、rsync 數據同步 1、rsync概述 2、rsync運行原理 3、rsync部署 一、ssh服務 1、概述 ssh服務&#xff0c;一種遠程管理連接工具&#xf…

使用隨機森林實現目標檢測

核心實現思路 滑動窗口策略&#xff1a;在圖像上滑動固定大小的窗口&#xff0c;對每個窗口進行分類多維特征提取&#xff1a;結合統計特征、紋理特征、邊緣特征、形狀特征等隨機森林分類&#xff1a;訓練二分類器判斷窗口是否包含目標后處理優化&#xff1a;使用非極大值抑制…

3.6 move_base導航初體驗

1.環境搭建 在工作空間src下git wpr_simulation&#xff0c;安裝install_for_noetic.sh&#xff0c;然后再回退工作空間進行編譯 下載參數文件 git clone https://github.com/6-robot/wpb_home.git下載需要魔法&#xff0c;在這里可以使用手機熱點進行平替 進入腳本文件夾 …

Mysql高級——MVCC(多版本并發控制)

MySQL MVCC&#xff08;多版本并發控制&#xff09;詳解 MVCC&#xff08;Multi-Version Concurrency Control&#xff09;是 MySQL InnoDB 存儲引擎實現的一種并發控制機制&#xff0c;用于在保證事務隔離性的同時&#xff0c;提高數據庫的并發性能。下面從原理、實現、事務隔…

Oracle union連接的怎么排序

在Oracle數據庫中&#xff0c;使用UNION或UNION ALL操作符來合并兩個或多個查詢結果時&#xff0c;如果想對這些合并后的結果進行排序&#xff0c;通常有兩種方法可以實現&#xff1a; 方法1&#xff1a;在最后的查詢結果上使用ORDER BY 你可以在所有使用UNION或UNION ALL合并…

uni-app總結2-所需知識儲備和學習途徑

使用uni-app進行跨平臺開發&#xff0c;開發者不用去掌握各個平臺的開發語言&#xff0c;只需一套代碼即可完成多端的產品輸出。那么使用uni-app需要掌握什么呢&#xff0c;這里給大家分享一下。 Vue.js uni-app里是通過Vue來開發的&#xff0c;所以首先肯定是要掌握Vue語言。…

如何高效實現公司文件管理

要實現公司文件管理的高效&#xff0c;企業應聚焦統一文件規范、部署文檔管理系統、強化權限控制、推動協同編輯、實施定期清理、推進文化建設、引入可視化分析。其中&#xff0c;統一文件規范是文件高效管理的基礎。若缺乏清晰的命名規則與分類體系&#xff0c;即便配備了先進…

多模態大語言模型arxiv論文略讀(124)

MediConfusion: Can you trust your AI radiologist? Probing the reliability of multimodal medical foundation models ?? 論文標題&#xff1a;MediConfusion: Can you trust your AI radiologist? Probing the reliability of multimodal medical foundation models …

nacos的總結

服務發現與健康監測&#xff1a;Nacos 支持多種服務注冊方式&#xff0c;包括 API、SDK 和 Annotation 等&#xff0c;服務消費者可以通過 DNS 或 RPC 方式方便地發現服務。其健康檢查機制通過主動和被動的方式實時監測服務實例的健康狀態&#xff0c;確保流量不會被發送到不健…

低軌導航 | 低軌衛星導航PNT模型,原理,公式,matlab代碼

一、PNT模型原理 低軌衛星PNT(定位、導航、授時)模型利用低軌星座的快速幾何構型變化和強信號特性,通過三類核心觀測值實現增強定位: 幾何增強原理 低軌衛星速度7km/s(比GNSS快8-10倍)5分鐘內觀測幾何變化相當于地面站24小時變化量加速模糊度收斂和誤差分離信號增強原理…

基于python的查詢工具,查詢手機號的卡號歸屬地

本文介紹了一個利用Python進行電話號碼歸屬地查詢的代碼示例。代碼使用requests庫發送HTTP請求&#xff0c;偽裝瀏覽器UA頭&#xff0c;通過lxml庫解析網頁數據&#xff0c;并運用XPath提取號碼歸屬地信息。程序構建了查詢URL&#xff0c;發送GET請求后解析返回的HTML內容&…

AI面試系統選型HR應考慮哪些問題?

北森人才管理研究院發布的《2025 企業校園招聘 AI 應用實用指南》數據顯示&#xff1a;全球 44% 的企業已在招聘環節部署AI技術&#xff0c;72% 的 HR 每周至少使用一次 AI 工具&#xff0c;87% 的 HR 認為 AI 能顯著提升招聘效率。 來源于《北森2025 企業校園招聘 AI 應用實用…

Redis02

redis的持久化機制 1.redis為什么需要持久化 redis本身運行時數據保存在內存中&#xff0c;那么在關閉redis的進程或者關閉計算機后數據肯定被會操作系統從內存中清掉。 redis持久化方式有兩種: RDB AOF redis默認采用了一種持久化方式&#xff0c;即RDB &#xff08;Redi…

Gartner發布網絡安全組織設計指南:設計網絡安全組織的五項原則和六種主要安全組織類型

安全和風險管理領導者經常尋求一種通用的模型來組織其職能&#xff0c;這可能導致效率低下和需求得不到滿足。然而&#xff0c;目前并沒有一個標準的組織模型。這項研究可以幫助他們根據企業實際情況&#xff0c;設計出最合適的網絡安全組織。 主要發現 許多安全和風險管理 (SR…