【Leetcode每日一刷】貪心算法|122.買賣股票的最佳時機 II、55. 跳躍游戲

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

力扣題目鏈接
在這里插入圖片描述

🦄解題思路:

首先需要明確的幾個點:

  • 當前只能有最大一支股票
  • 每一天操作只能3選1:買or賣or休息

此外,對于貪心,總有像下面圖示的一種直覺:如果后一天比今天高,則買,否則不買;這是正確的直覺:
在這里插入圖片描述
那么這里可能想給出這樣的一個思路:

  • 若當前元素的價格低于后面元素,則買入,并在后面一個元素賣出:相當于:確定了,今天買,必須明天賣;如此遍歷。
  • 若當前元素的價格高于后面元素,則當前元素不動,即休息一天。

沒錯,很有道理,但是我想到了一個反例:
如下圖,如果按照上面的思路,則第一個元素買入,第二個元素賣出;遍歷到第二個元素時,由于已經賣出,按理來說不能再操作了,但是由于當前元素低于第三個元素,還應該買下第二個元素,這樣似乎違法了每天只能有一個操作的前提。
在這里插入圖片描述
但是后來看了一些題解,發現這種情況根本不影響,雖然正確情況的:第 0 天買入,第 2 天賣出,那么利潤為:prices[2] - prices[0]。相當于 (prices[2] - prices[1]) + (prices[1] - prices[0])。也正是由于這種情況,也就是說,計算過程并不等同于實際交易過程,但是計算買賣利潤的總和的結果(prices[2] - prices[1]) + (prices[1] - prices[0]),和實際交易情況prices[2] - prices[0]的結果一致,這也是為什么可以這么算!

而且還要發現一點的是,買和賣總是一個單位,它們之間可能有“休息”,像上圖一樣,但是分解過后,還是兩天“買”和“賣”為一個單元。只有這樣才能獲得最大利潤。

在這里插入圖片描述

所以這題還是一個比較偏直覺的,一開始可能會像我一樣,死磕在當前這一天的操作上(一天操作只能三選一),從而無法下手。

所以具體算法過程如下,貪心貪的就是收集所有正項:

在這里插入圖片描述

貪心算法和動態規劃相比,它既不看前面(也就是說它不需要從前面的狀態轉移過來),也不看后面(無后效性,后面的選擇不會對前面的選擇有影響),因此貪心算法時間復雜度一般是線性的,空間復雜度是常數級別的;

?正確代碼:

class Solution {
public:int maxProfit(vector<int>& prices) {int res = 0;for (int i = 1; i < prices.size(); i++){res += max(prices[i]-prices[i-1],0);}return res;}
};

二、55. 跳躍游戲

力扣題目鏈接
在這里插入圖片描述
🦄解題思路:

我個人在做這題時并沒有做出來,而是陷入了兩個思維誤區:

  • 總是在想,比如當前位于元素值為3的位置,我是走1步還是走2步呢?還是3步呢?
  • 好像有點像動態規劃的跳樓梯?但是似乎不能從后往前推?狀態方程很難確定

其實這題還是貪心,而且它根本不拘泥與到底跳多少步,而是你能跳到哪?或者說你最遠能跳到哪里!你跳躍的覆蓋范圍!為什么這么說呢,可以看下面的圖解:

在這里插入圖片描述
所以這題的coding核心如下

  • cover變量,實時記錄和更新當前cover的最遠距離
  • for循環逐個遍歷數組元素,更新cover(注意for循環的邊界

?錯誤代碼和分析1:

class Solution {
public:bool canJump(vector<int>& nums) {int cover = 0;//表示當前覆蓋長度for (int i = 0; i < nums.size() - 1; i++){cover = max(i+1+nums[i],cover);}return cover >= nums.size()? true : false;}
};
  • 沒有考慮只有一個元素:
    在這里插入圖片描述

?錯誤代碼和分析2:

class Solution {
public:bool canJump(vector<int>& nums) {int cover = 0;//表示當前覆蓋長度if (nums.size() == 1) return true; // 只有一個元素,就是能達到for (int i = 0; i < nums.size() - 1; i++){cover = max(i+1+nums[i],cover);}return cover >= nums.size()? true : false;}
};
  • for循環邊界不是nums.size()-1而是cover!指到這個元素,確定范圍cover,起碼你要能到這個元素吧。遍歷都是要遍歷能到達的元素(也就是cover內的,即使cover是隨時更新的)。比如這個第一個元素是0,那么你都到不了第二個元素;
    在這里插入圖片描述

?正確代碼:

class Solution {
public:bool canJump(vector<int>& nums) {int cover = 0;//表示當前覆蓋數組范圍if (nums.size() == 1) return true; // 只有一個元素,就是能達到for (int i = 0; i <= cover; i++){cover = max(i + nums[i],cover);if (cover >= nums.size()-1) return true; // 說明可以覆蓋到終點了}return false;}
};

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

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

相關文章

力扣SQL50 產品銷售分析 I 查詢

Problem: 1068. 產品銷售分析 I 思路 left join on&#xff1a;左連接 Code select p.product_name, s.year, s.price from Sales s left join Product p on s.product_id p.product_id

靠譜的車【華為OD機試-JAVAPythonC++JS】

題目描述 程序員小明打了一輛出租車去上班。出于職業敏感&#xff0c;他注意到這輛出租車的計費表有點問題&#xff0c;總是偏大。 出租車司機解釋說他不喜歡數字4&#xff0c;所以改裝了計費表&#xff0c;任何數字位置遇到數字4就直接跳過&#xff0c;其余功能都正常。 比如&…

Scaffold 腳手架

Scaffold 腳手架 Scaffold 腳手架組件是一個核心組件&#xff0c;它為開發者提供了一個標準的、可定制的應用界面框架。androidx.compose.material3.Scaffold 包含了應用界面的基礎元素&#xff0c;如狀態欄、導航欄、頂部應用欄&#xff08;TopAppBar&#xff09;等。通過 Sc…

Windows的Docker-Desktop安裝與問題總結

目錄 Docker-Desktop安裝步驟 環境配置 Docker-Desktop安裝問題總結 問題1&#xff1a;docker-desktop setting界面一直加載轉圈 問題2&#xff1a;docker鏡像的存儲位置變更&#xff08;防止C盤空間不足&#xff09; 參考文獻&#xff1a; Docker-Desktop安裝步驟 環境…

又挖到寶了!國人團隊研發的AI視頻工具PixVerse,這么好用居然還完全免費!(強烈推薦)

昨天發了一款國產免費的 AI 繪畫工具 Dreamina 的介紹&#xff1a; 居然才發現&#xff01;字節跳動旗下國產AI繪畫工具Dreamina&#xff0c;這么好用居然還免費&#xff01;&#xff08;強烈推薦&#xff09; 發現大家對國產 AI 工具還挺感興趣的。今天繼續幫大家挖國產的 A…

【Leetcode每日一題】二分查找 - 山脈數組的峰頂索引(難度??)(23)

1. 題目解析 Leetcode鏈接&#xff1a;852. 山脈數組的峰頂索引 這個問題的理解其實相當簡單&#xff0c;只需看一下示例&#xff0c;基本就能明白其含義了。 核心在于找到題目中所說的峰值所在的下標并返回他們的下標即可。 2. 算法原理 峰頂及兩側數據特點分析 峰頂數據…

運算放大電路常用接法

1、反相比例運算電路 2、同相比例運算電路 3、電壓跟隨器 4、反相求和運算電路 5、同相求和運算電路 6、加減運算電路 7、加減電路 8、積分運算電路 9、實用積分電路 10、微分運算電路 11、實用微分電路 12、壓控電壓源二階低通濾波器 13、壓控電壓源二階高通濾波器 14、RC橋式…

[剪藏] - 尊湃通訊公司竊密曝光,發現繞不過華為

在科技領域風起云涌的今天&#xff0c;一場驚心動魄的竊密事件悄然發生&#xff0c;涉及華為WIFI6芯片技術的商業秘密被竊取&#xff0c;案中主謀竟然是一位曾在華為海思擁有重量級地位的技術大佬。本文將深入挖掘這起事件的來龍去脈&#xff0c;探討竊密者的背叛和華為的技術守…

CDGA數據治理工程師模擬試題(文末附鏈接)

單選題&#xff0c;每題僅有一個正確的選項。(本題型共有100道,總計100分) 1、關于元數據管理原則說法正確的是 A.確保員工了解如何訪問和使用元數據。 B.制定、實施和審核元數據標準&#xff0c;以簡化元數據的集成和使用。 C.創建反饋機制&#xff0c;以便數據…

公鑰密碼體制

公鑰密碼體制 一個系統中,n個用戶之間要進行保密通信,為了確保安全性,兩兩用戶之間的密鑰不能一樣。這種方式下,需要系統提供C2 n=n(n-1)/2把共享密鑰。這樣密鑰的數量就大幅增加了,隨之而來的產生、存儲、分配、管理密鑰的成本也大幅增加。而使用公鑰密碼體制可以大大減…

超1000本計算機經典書籍分享(均可免費下載)

今天給大家推薦兩個開源項目&#xff0c;均可百度網盤下載&#xff1a; 1 https://gitee.com/ForthEspada/CS-Books 超過1000本的計算機經典書籍、個人筆記資料以及作者在各平臺發表文章中所涉及的資源等。 書籍資源包括C/C、Java、Python、Go語言、數據結構與算法、操作系統…

深度學習-回顧經典AlexNet網絡:山高我為峰

深度學習-回顧經典AlexNet網絡之山高我為峰 深度學習中&#xff0c;經典網絡引領一波又一波的技術革命&#xff0c;從LetNet到當前最火的GPT所用的Transformer&#xff0c;它們把AI技術不斷推向高潮。2012年AlexNet大放異彩&#xff0c;它把深度學習技術引領第一個高峰&#x…

總結一下linux性能檢測和調優手段

1.perf 是 Linux 系統中性能分析工具&#xff0c;用于收集性能相關的信息。它可以用于查看 CPU 使用情況、內存性能、磁盤 I/O 等&#xff0c;以幫助開發者找到性能瓶頸。 以下是一些 perf 常見用法和示例&#xff1a; 1. CPU Profiling a. 查看 CPU 使用率 perf stat -e cpu…

10分鐘SkyWalking與SpringBoot融合并整合到Linux中

1.依賴配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.2.0.RELEASE</version></dependency><dependency><groupId>org.springframe…

復試PAT乙級day33

PAT乙級1106~1110 1106_2019數列有一個測試點過不了 1109_擅長C 這題不會&#xff0c;通過的是別人的代碼 1110_區塊反轉 這題跟1105_鏈表合并 的處理很像。值得注意的是分段區間翻轉用 大轉小轉 的方式。這題也有一個測試點通不過。

從模型到復合AI系統的轉變

2023年,大型語言模型(LLM)吸引了所有人的注意力,它可以通過提示來執行通用任務,例如翻譯或編碼。這自然導致人們將模型作為AI應用開發的主要成分而密切關注,所有人都在想新的LLM將帶來什么能力。然而,隨著越來越多的開發者開始使用LLM構建,我們認為這種關注正在迅速改變:最先進…

阿里云OSS掛到到ECS作為一個linux目錄(OSSFS掛載)

配置OSS賬號信息并掛載OSS Bucket。以下是該文檔的示例&#xff1a; OSSFS 配置與掛載指南 步驟 1&#xff1a;安裝必要的依賴包 首先&#xff0c;確保您的系統已經安裝了wget和fuse。這些工具是下載OSSFS安裝包和掛載文件系統所必需的。 bash復制代碼 # 檢查并安裝 wget if…

數據服務安全的重要性

數據服務安全在當今信息化社會顯得尤為重要。隨著大數據、云計算、人工智能等技術的飛速發展&#xff0c;數據已經成為企業和組織的核心資產&#xff0c;數據服務安全也面臨著前所未有的挑戰。本文將從數據服務安全的重要性、常見威脅、防護策略以及未來發展趨勢等方面進行探討…

selenuim【1】($x(‘xpath語法’)、WebDriverWait())

文章目錄 初學selenuim記錄1、執行driver webdriver.Chrome()后很久才打開瀏覽器2、瀏覽器多元素定位 $x(‘xpath語法’)3、打開瀏覽器driver.get("網址")執行了很久才開始定位元素&#xff1a;等待&#xff08;1&#xff09;driver.set_page_load_timeout(t)&#…

事務及SpringBoot中的事務開啟

目錄 1.什么是事務&#xff1f; 2.事務的四大特性&#xff1f; 3.SpringBoot中怎樣開啟事務 1.開啟事務支持 2.在需要開啟事務的方法或類上使用Transactional 3.通過配置類來開啟全局事務 1.什么是事務&#xff1f; 事務是指在數據庫管理系統中執行的一系列操作的邏輯單元。事…