貪心算法02(leetcode122/55/4)

參考資料:

https://programmercarl.com/0122.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BAII.html

122. 買賣股票的最佳時機 II

題目描述:

給你一個整數數組?prices?,其中?prices[i]?表示某支股票第?i?天的價格。

在每一天,你可以決定是否購買和/或出售股票。你在任何時候?最多?只能持有?一股?股票。你也可以先購買,然后在?同一天?出售。

返回?你能獲得的?最大?利潤?。

示例 1:

輸入:prices = [7,1,5,3,6,4]
輸出:7
解釋:在第 2 天(股票價格 = 1)的時候買入,在第 3 天(股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5 - 1 = 4 。隨后,在第 4 天(股票價格 = 3)的時候買入,在第 5 天(股票價格 = 6)的時候賣出, 這筆交易所能獲得利潤 = 6 - 3 = 3 。總利潤為 4 + 3 = 7 。

思路分析:

? ? ? ? 貪心思路:每天只取正利潤

代碼實現:

class Solution {//差分數組public int maxProfit(int[] prices) {//可以理解為:最大的盈利就是將所有正值相加int len=prices.length;if(len==0 || len==1) return 0;int[] diff=new int[len];diff[0]=prices[0];for(int i=1;i<len;i++){diff[i]=prices[i]-prices[i-1];}int res=0;for(int i=1;i<len;i++){//差分數組中大于0的就是盈利的值if(diff[i]>0) res+=diff[i];}return res;}//動規 //對比 買賣股票1,只有dp[i][0]的遞推公式改變// public int maxProfit(int[] prices) {//     // if (prices == null || prices.length == 0) return 0;//     int len=prices.length;//     int[][] dp=new int[len][2];//     //dp[i][0]:第i天 不持有 這個股票的max金額//     //dp[i][1]:第i天 持有 這個股票的max金額//     dp[0][0]=0;//     dp[0][1]=-prices[0];//     for(int i=1;i<len;i++){//         dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+prices[i]);//-prices[i]變為dp[i-1][1]-prices[i]//         dp[i][1]=Math.max(dp[i-1][1],dp[i-1][0]-prices[i]);//     }//     //一定是最后一天不持有股票的金額 > 仍持有//     return dp[len-1][0];// }
}

55. 跳躍游戲

題目描述:

給你一個非負整數數組?nums?,你最初位于數組的?第一個下標?。數組中的每個元素代表你在該位置可以跳躍的最大長度。

判斷你是否能夠到達最后一個下標,如果可以,返回?true?;否則,返回?false?。

示例?1:

輸入:nums = [2,3,1,1,4]
輸出:true
解釋:可以先跳 1 步,從下標 0 到達下標 1, 然后再從下標 1 跳 3 步到達最后一個下標。

思路分析:

? ? ? ? 記錄每一個能覆蓋到的最大范圍,能覆蓋到結尾就返回

代碼實現:

class Solution {//覆蓋范圍//局部最優,每個元素最大的覆蓋范圍——>全局最優,總共最大的覆蓋范圍public boolean canJump(int[] nums) {if(nums.length==1) return true;int cover=0;for(int i=0;i<=cover;i++){cover=Math.max(cover,i+nums[i]);if(cover>=nums.length-1) return true;}return false;}
}

?45. 跳躍游戲 II

題目描述:

給定一個長度為?n?的?0 索引整數數組?nums。初始位置為?nums[0]

每個元素?nums[i]?表示從索引?i?向前跳轉的最大長度。換句話說,如果你在?nums[i]?處,你可以跳轉到任意?nums[i + j]?處:

  • 0 <= j <= nums[i]?
  • i + j < n

返回到達?nums[n - 1]?的最小跳躍次數。生成的測試用例可以到達?nums[n - 1]

示例 1:

輸入: nums = [2,3,1,1,4]
輸出: 2
解釋: 跳到最后一個位置的最小跳躍數是 2。從下標為 0 跳到下標為 1 的位置,跳?1步,然后跳?3?步到達數組的最后一個位置。

思路分析:

記錄當前覆蓋范圍里的下一個最大覆蓋范圍,

?如果下一覆蓋范圍到結尾就res++,break

?如果當前覆蓋走到尾了,記錄的下一個覆蓋范圍也未到尾,則進入下一個覆蓋范圍繼續搜索,res++

代碼實現:

class Solution {public int jump(int[] nums) {if(nums.length==1) return 0;int cur=0;//當前cover的最遠下標int next=0;//下一個覆蓋范圍int res=0;for(int i=0;i<nums.length;i++){next=Math.max(next,i+nums[i]);//記錄當前覆蓋范圍中的下一覆蓋范圍maxif(next>=nums.length-1){//調到下一個覆蓋范圍即可res++;break;}if(i==cur){//當前覆蓋范圍走到盡頭了也沒到結尾,要進入下一個覆蓋范圍cur=next;res++;//跳進下一個覆蓋范圍}}return res;}
}

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

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

相關文章

STM32讀寫內部FLASH讀取芯片id

文章目錄 讀寫內部Flash接線程序編寫測試效果補充 讀取芯片id代碼編寫 讀寫內部Flash 接線 程序編寫 首先使用ThisFlash.c來寫入flash的基本操作&#xff0c;寫入、讀取、擦除&#xff0c;然后使用Store.c配合數組來進行主存與flash的交互 ThisFlash.c #include "stm32…

為什么工控現場會用到Profinet轉Modbus網關設備

一、背景&#xff1a; 工控現場之所以需要使用Profinet轉Modbus網關&#xff0c;是因為工控系統中常常存在不同廠家設備之間通訊協議不一致的問題。而Modbus和Profinet分別代表著兩種不同的通信協議&#xff0c;Profinet通常用于較新的設備&#xff0c;而Modbus則是比較老的通…

思科防火墻ASA Version 9.1(1) 怎么配置靜態NAT,把內網ip192.168.1.10 端口1000映射到公網端口1000上?

環境: 思科防火墻5520 ASA Version 9.1(1) 問題描述: 思科防火墻ASA Version 9.1(1) 怎么配置靜態NAT,把內網ip192.168.1.10 端口1000映射到公網端口1000上? 解決方案: 舊版本8.0 1.做之前要先查一下有沒有端口被占用,要和業務確認2.sh Xlate | in 10011 端口 這條…

ch2應用層--計算機網絡期末復習

2.1應用層協議原理 網絡應用程序位于應用層 開發網絡應用程序: 寫出能夠在不同的端系統上通過網絡彼此通信的程序 2.1.1網絡應用程序體系結構分類: 客戶機/服務器結構 服務器: 總是打開(always-on)具有固定的、眾所周知的IP地址 主機群集常被用于創建強大的虛擬服務器 客…

MongoDB CRUD操作:快照查詢

MongoDB CRUD操作&#xff1a;快照查詢 文章目錄 MongoDB CRUD操作&#xff1a;快照查詢對比本地和快照的讀關注舉例從相同的時間點運行查詢從過去某個時刻讀取數據的一致狀態 配置快照保留時間磁盤空間和歷史記錄 使用快照查詢可以讀取最近某個時間點的數據&#xff0c;而且從…

基于51單片機的溫控風扇的設計–仿真設計

可實現通過DS18B20測量當前環境溫度 可實現通過溫度自動控制風扇轉速 可實現通過按鍵設置不同風速對應的溫度 可實現通過按鍵切換自動、手動模式 可實現在手動模式下通過按鍵調整風扇轉速 可實現通過LCD1602顯示溫度、風扇轉速擋位、自動/手動模式

【C++】模擬實現string類

&#x1f984;個人主頁:修修修也 &#x1f38f;所屬專欄:C ??操作環境:Visual Studio 2022 目錄 一.了解項目功能 二.逐步實現項目功能模塊及其邏輯詳解 &#x1f38f;構建成員變量 &#x1f38f;實現string類默認成員函數 &#x1f4cc;構造函數 &#x1f4cc;析構函數…

k8s 全面掌控日志系統

概述 為了提高系統運維和故障排查的效率&#xff0c; 日志系統采用 ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;技術棧&#xff0c;通過 FileBeats 作為日志收集器&#xff0c;將來自不同節點的日志數據匯總并存儲在 Elasticsearch 中&#xff0c;最終通過 K…

創建一個新的Spring Security應用程序,并使用JDBC連接數據庫

創建一個新的Spring Security應用程序&#xff0c;并使用JDBC連接數據庫 在這個教程中&#xff0c;我們將學習如何創建一個新的Spring Security應用程序&#xff0c;使用JDBC連接數據庫以獲取用戶信息并進行認證。我們還將學習如何配置Spring Security以從數據庫中獲取用戶和權…

Vue3使用Composition API實現響應式

title: Vue3使用Composition API實現響應式 date: 2024/5/29 下午8:10:24 updated: 2024/5/29 下午8:10:24 categories: 前端開發 tags: Vue3CompositionRefsReactiveWatchLifecycleDebugging 1. 介紹 Composition API是Vue.js 3中新增的一組API&#xff0c;用于在組件中組…

SQL 語言:嵌入式 SQL 和動態 SQL

文章目錄 基本概述嵌入式 SQL動態 SQL總結 基本概述 嵌入式SQL和動態SQL是兩種在應用程序中嵌入和使用SQL語句的方法。它們都允許開發人員在編程語言中編寫SQL語句&#xff0c;以便在應用程序中執行數據庫操作。然而&#xff0c;這兩種方法在實現方式、性能和靈活性方面存在一…

Java數據結構與算法(紅黑樹)

前言 紅黑樹是一種自平衡二叉搜索樹&#xff0c;確保在插入和刪除操作后&#xff0c;樹的高度保持平衡&#xff0c;從而保證基本操作&#xff08;插入、刪除、查找&#xff09;的時間復雜度為O(log n)。 實現原理 紅黑樹具有以下性質&#xff1a; 每個節點要么是紅色&#…

go語言學習之旅之Go結構體

在Go語言中&#xff0c;結構體&#xff08;struct&#xff09;是一種用戶定義的數據類型&#xff0c;用于組合不同類型的數據項。結構體可以包含其他結構體或基本數據類型的字段。以下是關于Go語言結構體的基本知識&#xff1a; 定義結構體&#xff1a; package mainimport &…

Python 之微信指數小程序數據抓取

Fiddler安裝和設置 安裝 Fiddler 安裝包可以從這里獲取&#xff0c;如果失效了可以自己網上找一個安裝。 鏈接&#xff1a;https://pan.baidu.com/s/1N30BoDWm2_dBL8i8GRzK5g?pwd1znv 提取碼&#xff1a;1znv 然后就是點擊安裝就好了&#xff0c;沒什么好多說的。 啟用…

刷代碼隨想錄有感(83):貪心算法——最大子數組和

題干&#xff1a; 代碼&#xff1a; class Solution { public:int maxSubArray(vector<int>& nums) {int res INT_MIN;int count 0;for(int i 0; i < nums.size(); i){count nums[i];if(count > res) res count;if(count < 0)count 0;}return res;} …

【創作活動】探索 GPT-4o:下一代語言模型的技術革命

&#x1f604; 19年之后由于某些原因斷更了三年&#xff0c;23年重新揚帆起航&#xff0c;推出更多優質博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有堅忍不拔之志 &#x1f390; 個人CSND主頁——Mi…

HTTP報文

HTTP報文 報文流 HTTP報文是在HTTP引用程序之間發送的數據塊&#xff0c;這些數據塊以一種文本形式的元信息開頭&#xff0c;這些信息描述了報文的內容和含義&#xff0c;后面跟著可選的數據部分&#xff0c;這些報文在客戶端&#xff0c;服務器和代理之間流動。 報文流入源…

git更改本地項目關聯到新倉庫

刪除現在遠程關聯的倉庫 git remote rm origin鏈接新倉庫 git remote add origin url(需要關聯的新倉庫地址)代碼提交到遠程倉庫master分支 git push --set-upstream origin master本地分支更新同步至遠程倉庫 比如本地有dev分支 git push origin dev:dev

前端項目開發,3個HTTP請求工具

這一小節&#xff0c;我們介紹一下前端項目開發中&#xff0c;HTTP請求會用到的3個工具&#xff0c;分別是fetch、axios和js-tool-big-box中的jsonp請求。那么他們都有哪些小區別呢&#xff1f;我們一起來看一下。 目錄 1 fetch 2 axios 3 js-tool-big-box 的 jsonp 請求 …

拷貝構造、移動構造、拷貝賦值、移動賦值

最近在學習C的拷貝構造函數時發現一個問題&#xff1a;在函數中返回局部的類對象時&#xff0c;并沒有調用拷貝構造函數。針對這個問題&#xff0c;查閱了一些資料&#xff0c;這里記錄整理一下。 調用拷貝構造函數的三種情況&#xff1a; ① 用一個類去初始化另一個對象時&a…