LCR 090. 打家劫舍 II(leetcode)動態規劃

文章目錄

  • 前言
  • 一、題目分析
  • 二、算法原理
    • 1.狀態表示
    • 2.狀態轉移方程
    • 3.初始化
    • 4.填表順序
    • 5.返回值是什么
  • 三、代碼實現
  • 總結


前言

在本文章中,我們將要詳細介紹一下LeetcodeLCR 090. 打家劫舍 II。采用動態規劃解決,這是一道經典的多狀態dp問題

一、題目分析

在這里插入圖片描述
計算小偷能偷到的最大金額數,并且題目規定:
??🥉.兩個相鄰的房屋不能被偷
??🥉.第一個房屋和最后一個房屋不能被偷
規定1比較好解決,對于規定2,我們采用分情況討論的方法解決
??🍔.第一個房間偷,第二個房間和最后一個不被偷,在(2,n-2)下標之間尋找最大金額,再加上nums[0].
??🍔.第一個房間不被偷,最后一個房間不確定,在(1,n-1)下標之間尋找最大金額
??🍔.二者取最大值,就是題目所返回的值

二、算法原理

1.狀態表示

列出dp表,dp表中值的含義是什么
這可以細分為兩個表,因為經過該房間時不確定偷與不偷
???? .f[i]表示到達i房間時,資金被偷
????.g[i]表示到達i房間時,資金沒有被偷

2.狀態轉移方程

根據最近一步劃分問題
??🌟 f[i]:i位置被偷,那么根據題目規定,i-1位置就不能被偷,這不就正好是g[i-1],再加上i位置被偷的資金;
??🌟g[i]:i位置沒有被偷,i-1位置我們不確定有沒有被偷,所以需要分為兩種情況,這兩種情況取最大值
????🐧.i-1位置也沒有被偷,就是g[i-1]
????🐧.i-1位置被偷了,就是f[i-1]
結論:
??f[i]=g[i-1]+nums[i];
??g[i]=max(g[i-1],f[i-1])

3.初始化

保證填表不越界
??f[1]需要g[0]的值;g[1]需要g[0]和f[0]的值, 所以需要初始化g[0]和f[0].
??不用開辟額外的空間,這道題目的初始化很簡單。
注意:數組的下標和邊界條件

4.填表順序

兩個表一起填,從左往右

5.返回值是什么

max(f[n-1],g[n-1]);

三、代碼實現

class Solution {
public:int massage(vector<int>& nums,int left,int right) {if(left>right){return 0;}//建表int n=nums.size();int f[n];int g[n];//初始化for(int i=0;i<n;i++){f[i]=g[i]=0;}f[left]=nums[left];g[0]=0;//填表for(int i=left;i<=right;i++){f[i]=g[i-1]+nums[i];g[i]=max(g[i-1],f[i-1]);}//返回值return max(f[right],g[right]);}int rob(vector<int>& nums) {int  n=nums.size();//下標int ret1=massage(nums,2,n-2)+nums[0];int ret2=massage(nums,1,n-1);return max(ret1,ret2);}
};

總結

以上就是我們對LeetcodeLCR 090. 打家劫舍 II(leetcode)詳細介紹,希望對大家的學習有所幫助,僅供參考 如有錯誤請大佬指點我會盡快去改正 歡迎大家來評論~~

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

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

相關文章

人工智能從 DeepMind 到 ChatGPT ,從 2012 - 2024

本心、輸入輸出、結果 文章目錄 人工智能從 DeepMind 到 ChatGPT &#xff0c;從 2012 - 2024前言2010年&#xff1a;DeepMind誕生2012&#xff5e;2013年&#xff1a;谷歌重視AI發展&#xff0c;“拿下”Hinton2013&#xff5e;2014年&#xff1a;谷歌收購DeepMind2013年&…

stm32一種步進電機查表法驅動

文章目錄 一、定時器基礎頻率二、驅動原理三、關鍵代碼 對于stm32芯片來說&#xff0c;步進電機的驅動由于要在中斷中不斷計算下一次脈沖的時間而極其消耗算力&#xff0c;使用計算的方法對于芯片的算法消耗更高&#xff0c;特別是在f1這種算力比較低的芯片上&#xff0c;這時候…

Pipenv環境配置+Pytest運行

環境配置 使用Pipenv進行虛擬環境管理&#xff0c;Pipfile為依賴模塊管理文件。 安裝pipenv&#xff1a;brew install pipenv根項目根目錄下執行命令創建虛擬環境&#xff1a; pipenv install在Pycharm中指定項目運行的虛擬環境 &#xff1a;File->Settings->Project:-…

一文2500字使用Python進行GRPC和Dubbo協議的高級測試

01、GRPC測試 GRPC&#xff08;Google Remote Procedure Call&#xff09;是一種高性能、開源的遠程過程調用&#xff08;RPC&#xff09;框架&#xff0c;由 Google開發并基于Protocol Buffers&#xff08;protobuf&#xff09;進行通信。它使用了HTTP/2協議作為傳輸層&#…

C++11條件變量condition_variable

文章目錄 前言正文等待通知注意事項 結尾 前言 條件變量用于多線程中&#xff0c;其作用是在多線程間實現線程的等待、喚醒和通知機制&#xff0c;常配合互斥鎖&#xff08;std::mutex&#xff09;一起使用。它主要用于解決數據競爭問題>。 正文 條件變量只有五個函數&am…

PyQt6 QCalendarWidget日歷控件

?鋒哥原創的PyQt6視頻教程&#xff1a; 2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~共計39條視頻&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面開發 視頻教程(無廢話…

快速實現入門HarmonyOS開發

本文檔適用于HarmonyOS應用開發的初學者。編寫兩個簡單的頁面&#xff0c;實現在第一個頁面點擊按鈕跳轉到第二個頁面。開始前&#xff0c;請參考下載與安裝軟件、配置開發環境和運行HelloWorld&#xff0c;完成開發工具的安裝和開發環境的配置。 開發Ability 概述&#xff1…

Python 日期時間模塊詳解(datetime)

文章目錄 1 概述1.1 datetime 類圖1.2 類描述 2 常用方法2.1 獲取當前日期時間&#xff1a;now()、today()、time()2.2 日期時間格式化&#xff1a;strftime()2.3 日期時間大小比較&#xff1a;>、、<2.4 日期時間間隔&#xff1a;- 3 擴展3.1 Python 中日期時間格式化符…

混合預編碼(Hybrid Precoding)的全連接結構與子連接結構

A Survey on Hybrid Beamforming Techniques in 5G: Architecture and System Model Perspectives 全連接結構的混合預編碼 子連接結構的混合預編碼 Alternating Minimization Algorithms for HybridPrecoding in Millimeter Wave MIMO Systems

UE Websocket筆記

參考鏈接 [UE4 C入門到進階]12.Websocket網絡通信 - 嗶哩嗶哩 包含怎么用Nodejs 寫測試服務器 UE4_使用WebSocket和Json&#xff08;上&#xff09; - 知乎 包含Python寫測試服務器 UE4_使用WebSocket和Json&#xff08;下&#xff09; - 知乎 示例代碼 xxx.Build.cs"W…

【React】使用react hooks實現評論示例

實現功能 1、渲染評論列表 2、刪除評論 3、渲染導航欄和高亮 4、評論列表排序功能 5、獲取評論 6、點擊發布按鈕發布評論 7、清空輸入框 8、重新聚焦 實現代碼 1、需要引入 import React, { useRef, useState } from react import avatar from "../logo.png" //頭…

[動態規劃及遞歸記憶搜索法]2.插入乘號

插入乘號 題目描述 給定一個非負整數&#xff0c;用k個乘號將其分割&#xff0c;使得乘積最大。 例如&#xff1a;在整數12345中插入兩個乘號&#xff0c;有以下插入法&#xff1a; 1*2*345 1*23*45 1*234*5 12*3*45 12*34*5 123*4*5 其中最大值是123*4*5 2460 關于輸入 一…

前端小技巧: 面向切面編程在前端代碼中的應用

面向切面編程 面向切面編程在java中提出這類概念但是在js沒有束縛和約定&#xff0c;只需要按編程思想來實現原理在js中使用function或class實現面向切面編程 面向切面概念 AOP (Aspect Oriented Programming) 面向切面編程主要實現目的是針對業務處理過程中的切面進行提取&…

第18章:隨堂復習與企業真題(JDK8-17新特性)

第18章&#xff1a;隨堂復習與企業真題&#xff08;JDK8-17新特性&#xff09; 一、隨堂復習 1. JDK新特性的概述 幾個重要的版本 jdk 5.0 / jdk 8.0 &#xff1a;里程碑式的版本jdk9.0 開始每6個月發布一個新的版本LTS : jdk8 、 jdk 11 、 jdk 17 如何學習新特性 > 角…

Android安全學習路標

1. Android操作系統基礎知識 首先&#xff0c;你需要建立堅實的Android操作系統基礎知識&#xff0c;包括Android架構、進程和內存管理、應用組件和權限模型等基本概念。 2. 安全防范理論 學習關于安全防范理論的基礎知識&#xff0c;包括常見的威脅模型、攻擊類型和安全風險…

Python-猜數字游戲

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主頁&#xff1a;一只程序猿子 博客主頁 &#x1f388; 個人介紹&#xff1a;愛好(bushi)編程&#xff01; &#x1f388; 創作不易&#xff1a;喜歡的話麻煩您點個&#x1f44d;和?&#xff01; &#x1f388;…

免費的AI改寫文案軟件,熱門AI改寫文案軟件【2024】

在數字化時代&#xff0c;文案創作變得更為便捷&#xff0c;其中AI改寫文案軟件的興起為寫作者們帶來了全新的創作體驗。這些工具通過智能算法和自然語言處理技術&#xff0c;能夠快速改寫文本&#xff0c;提高創作效率。本文將深入探討AI改寫文案軟件的現狀&#xff0c;介紹一…

LeetCode題:174. 地下城游戲

目錄 一、題目要求 二、解題思路 &#xff08;1&#xff09;狀態表示 &#xff08;2&#xff09;狀態轉移方程 &#xff08;3&#xff09;初始化dp表 &#xff08;4&#xff09;填表順序 &#xff08;5&#xff09;返回值 三、代碼 一、題目要求 174. 地下城游戲 惡魔們…

swagger入門

swagger入門 pom依賴 不用專門導入swagger 因為springboot已經將它集成了 org.springframework.boot spring-boot-starter com.github.xiaoymin knife4j-spring-boot-starter Swagger配置類 Configuration public class SwaggerConfig { // 創建并配置Docket Bean&#xf…

snakeyaml編輯yaml文件并覆蓋注釋

文章目錄 前言技術積累實戰演示1、引入maven依賴2、覆蓋注釋工具類3、snakeyaml工具類4、測試用例5、測試效果展示 寫在最后 前言 最近在做一個動態整合框架的項目&#xff0c;需要根據需求動態組裝各個功能模塊。其中就涉及到了在application.yaml中加入其他模塊的配置&#…