LeetCode-19day:貪心算法

貪心算法經典題目總結(C++實現)

貪心算法是一種在每一步選擇中都采取當前狀態下最優(即最有利)的選擇,從而希望導致結果是全局最優的算法。本文總結了四道經典的貪心算法問題,幫助你更好地理解和掌握貪心算法的應用。


🟢 1. 買賣股票的最佳時機(Best Time to Buy and Sell Stock)

📄 題目描述:

給定一個數組 prices,其中第 i 個元素是第 i 天的股票價格。假設你最多只能進行一次交易(即買入和賣出一支股票),設計一個算法來計算你所能獲取的最大利潤。

🧠 解題思路(簡潔版)

  • 一次遍歷
    • 遍歷價格數組,維護當前最低價格 minp 和最大利潤 maxp
    • 每天更新最低價格和最大利潤。

?? 復雜度分析

  • 時間復雜度:O(n),其中 n 為價格數組長度。
  • 空間復雜度:O(1)

? C++ 實現

class Solution {
public:int maxProfit(vector<int>& prices) {int minp = 1e9, maxp = 0;for (auto& price : prices) {maxp = max(maxp, price - minp);minp = min(minp, price);}return maxp;}
};

🟢 2. 跳躍游戲(Jump Game)

📄 題目描述:

給定一個非負整數數組 nums,你最初位于數組的第一個位置。數組中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最后一個位置。

🧠 解題思路(簡潔版)

  • 貪心算法
    • 遍歷數組,維護當前能到達的最遠位置 rightmost
    • 若當前位置可達,則更新最遠位置。
    • 若最遠位置覆蓋數組末尾,返回 true

?? 復雜度分析

  • 時間復雜度:O(n),其中 n 為數組長度。
  • 空間復雜度:O(1)

? C++ 實現

class Solution {
public:bool canJump(vector<int>& nums) {int n = nums.size();int rightmost = 0;for (int i = 0; i < n; i++) {if (i <= rightmost) {rightmost = max(rightmost, i + nums[i]);if (rightmost >= n - 1) return true;}}return false;}
};

🟢 3. 跳躍游戲 II(Jump Game II)

📄 題目描述:

給定一個非負整數數組 nums,你最初位于數組的第一個位置。數組中的每個元素代表你在該位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達數組的最后一個位置。

🧠 解題思路(簡潔版)

  • 貪心算法
    • 遍歷數組,維護當前能到達的最遠位置 maxpos 和當前步的邊界 end
    • 若當前位置到達邊界,則更新邊界為最遠位置并增加步數。
    • 直到覆蓋數組末尾。

?? 復雜度分析

  • 時間復雜度:O(n),其中 n 為數組長度。
  • 空間復雜度:O(1)

? C++ 實現

class Solution {
public:int jump(vector<int>& nums) {int maxpos = 0, n = nums.size(), end = 0, step = 0;for (int i = 0; i < n - 1; i++) {if (maxpos >= i) {maxpos = max(maxpos, i + nums[i]);if (i == end) {end = maxpos;step++;}}}return step;}
};

🟢 4. 劃分字母區間(Partition Labels)

📄 題目描述:

給定一個字符串 s,將字符串劃分成若干個字母區間,每個區間內的字母互不相同。返回每個區間的長度。

🧠 解題思路(簡潔版)

  • 貪心算法
    • 預處理每個字符的最后出現位置。
    • 遍歷字符串,維護當前區間的起始和結束位置。
    • 當遍歷到當前區間的結束位置時,記錄區間長度并更新起始位置。

?? 復雜度分析

  • 時間復雜度:O(n),其中 n 為字符串長度。
  • 空間復雜度:O(1),固定大小的數組。

? C++ 實現

class Solution {
public:vector<int> partitionLabels(string s) {int last[26];int length = s.size();for (int i = 0; i < length; i++) {last[s[i] - 'a'] = i;}vector<int> partition;int start = 0, end = 0;for (int i = 0; i < length; i++) {end = max(end, last[s[i] - 'a']);if (i == end) {partition.push_back(end - start + 1);start = end + 1;}}return partition;}
};

📌 總結

題目方法時間復雜度空間復雜度
買賣股票的最佳時機一次遍歷O(n)O(1)
跳躍游戲貪心算法O(n)O(1)
跳躍游戲 II貪心算法O(n)O(1)
劃分字母區間貪心算法O(n)O(1)

希望本文對你有所幫助!如果你還有其他問題,歡迎繼續提問。

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

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

相關文章

Microsoft Edge WebView2 Runtime:為應用程序提供瀏覽器核心功能

在現代軟件開發中&#xff0c;嵌入網頁內容到應用程序界面是一個常見的需求。Microsoft Edge WebView2 Runtime&#xff08;WebView2運行庫&#xff09;作為微軟操作系統WebView2控件的運行環境&#xff0c;基于Chromium內核構建&#xff0c;為應用程序提供了瀏覽器核心功能&am…

PDF文件中的相鄰頁面合并成一頁,例如將第1頁和第2頁合并,第3頁和第4頁合并

PDF頁面合并工具 這個工具可以將PDF文件中的相鄰頁面合并成一頁&#xff0c;例如將第1頁和第2頁合并&#xff0c;第3頁和第4頁合并&#xff0c;以此類推。 功能 自動檢測PDF文件中的頁面數量將相鄰的頁面合并成一頁處理奇數頁數的PDF文件&#xff08;最后一頁單獨保留&#xff…

git hub初使用問題記錄

問題一、Connection closed by UNKNOWN port 65535設置config文件為Host github.com Hostname ssh.github.com Port 443 User git問題二、ERROR: Repository not found.fatal: Could not read from remote repository.Please make sure you have the correct access rightsand …

解讀 AUTOSAR AP R24-11 Manifest 規范 —— 從部署到安全的全流程支撐

今天我們來拆解 AUTOSAR AP R24-11 版本的《Requirements on Manifest Specification》Manifest 規范要求—— 這份文檔是 Adaptive 平臺軟件 “落地運行” 的核心指南,它解決了一個關鍵問題:如何讓 AP 軟件在車載 ECU 上安全、可靠地部署和通信? 自適應平臺(AP)是啥? 是…

Linux系統 -- 多線程的控制(互斥與同步)

在多線程編程中&#xff0c;多個線程可能同時訪問臨界資源&#xff08;如共享變量、文件、硬件設備等&#xff09;&#xff0c;若缺乏控制會導致數據混亂。互斥和同步是解決該問題的核心機制&#xff0c;其中互斥鎖保證臨界資源的排他訪問&#xff0c;信號量實現線程間的有序協…

一鍵搭建開發環境:制作bash shell腳本

完整腳本&#xff1a; 1.0 #!/bin/bash set -eecho " 開始安裝 AI 開發環境&#xff08;無人交互版&#xff09; "# 檢測是否以 sudo 運行 if [ "$EUID" -eq 0 ]; thenecho "?? 警告&#xff1a;請不要使用 sudo 運行此腳本&#xff01;"echo …

mac m4執行nvm install 14.19.1報錯,安裝低版本node報錯解決

原因 由于node14使用的變異工具鏈太舊&#xff0c;無法適配最新的macOS SDK頭文件導致_studio.h報錯 解決辦法 方法1 更新nvm到最新版本 brew update nvmnvm install 14.19.1 --binary 方法2 啟用Rosetta安裝&#xff08;Intel仿真&#xff09; 1.arch -x86_64 zsh 2.nvm insta…

Codeforces Round 1043 (Div. 3) F. Rada and the Chamomile Valley

F.拉達和甘菊谷 每次測試的時間限制&#xff1a;3 秒 每次測試的內存限制512 兆字節 輸入&#xff1a;標準輸入 輸出&#xff1a;標準輸出 昨天&#xff0c;拉達發現了一個傳送門&#xff0c;可以把她傳送到洋甘菊谷&#xff0c;然后再傳送回來。拉達的快樂無以言表&#xff0c…

STM32 入門實錄:從 0 到 3 色 LED 呼吸式閃爍

一、需求 & 最終效果 硬件&#xff1a;Blue-Pill&#xff08;STM32F103C8T6&#xff09; 3 只 LED&#xff08;紅 PA0、黃 PA1、綠 PA2&#xff09;現象&#xff1a;上電后紅→黃→綠→黃→全滅&#xff0c;每步 100 ms&#xff0c;循環往復。 二、硬件連接LED 端連接說明陰…

Playwright與PyTest結合指南

Playwright與PyTest的結合&#xff0c;為Web自動化測試帶來了強大的動力。它讓你既能利用Playwright現代、跨瀏覽器的自動化能力&#xff0c;又能借助PyTest成熟測試框架的結構化、可擴展性來高效管理和組織測試用例。我會帶你了解如何將這兩者結合使用。 為了讓你快速上手&am…

plantsimulation知識點 一條軌道上多臺RGV如何引用

最近做項目有如下需求&#xff1a;軌道1上初始化生成三臺RGV&#xff0c;然后通過另一條軌道2上的傳感器代碼控制軌道1上的三臺RGV&#xff0c;之前如果另一條軌道只有一臺RGV&#xff0c;我是通過軌道2.cont來引用這臺RGV的。但是現在軌道上有了多臺RGV&#xff0c;此代碼就不…

【Canvas與盾牌】“靡不有初,鮮克有終”黃豎條盾牌

【成圖】【代碼】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>黃豎條盾牌 Draft1</title><style type"text/css"&…

使用linux+javascript+html+mysql+nodejs+npm+express等構建信息資料采集系統

一、適用場景 1、人才信息庫、檔案管理&#xff0c;構建企業或單位內部人才庫。 2、公務員/事業單位招聘&#xff0c;網上報名填寫資料、上傳證書等。 3、科研項目申報&#xff0c;課題負責人信息、成果附件、審查材料上傳。 4、志愿者招募&#xff1a;在線填寫報名信息&#…

低空經濟產業白皮書:音視頻鏈路在智能飛行體系中的核心地位

引言 低空經濟正在成為繼數字經濟、新能源產業之后的又一戰略制高點。它不僅意味著無人機物流、空中通勤、應急救援、文旅體驗等新業態的興起&#xff0c;更代表著 城市治理、智能制造、公共服務全面進入空域數字化時代。從政策引導到產業投資&#xff0c;從技術突破到應用創新…

【LeetCode 熱題 100】32. 最長有效括號——(解法二)動態規劃

Problem: 32. 最長有效括號 文章目錄整體思路完整代碼時空復雜度時間復雜度&#xff1a;O(N)空間復雜度&#xff1a;O(N)整體思路 這段代碼同樣旨在解決 “最長有效括號” 問題&#xff0c;但它采用的是一種 動態規劃 (Dynamic Programming) 的方法。這種方法通過構建一個DP表…

使用Docker部署ZLMediaKit流媒體服務器實現gb/t28181協議的設備

最近在研究一個攝像頭&#xff0c;通信協議是 gb/t28181。對于這個協議也是第一次接觸&#xff0c;通過查閱多方資料&#xff0c;找到了兩個開源的源碼&#xff0c;來實現 視頻播放、攝像頭直播。以前也沒有深入的了解過關于視頻播放的這方面的技術&#xff0c;偶爾網站播放視頻…

硬件三人行--運算基礎篇

第3講 負反饋放大電路

【LINUX網絡】TCP原理

目錄 本文介紹 1. 什么是TCP&#xff1f; 2. TCP結構 為什么需要協議棧&#xff1a;兩臺主機通信的復雜性解決方案 3. 確認應答機制 進一步理解什么是確認和請求以及序號 進一步理解什么是序號和確認序號 并發發送帶來的問題以及解決方案&#xff08;序號&#xff09; …

Java -- 文件基礎知識--Java IO流原理--FileReader

目錄 1. 常用文件操作 2. Java IO流原理 2.1 流的分類 3. FileReader和FileWriter介紹 FileReader相關方法&#xff1a; FileWriter常用方法&#xff1a; 文件是保存數據的地方&#xff0c;比如大家經常使用的word文檔&#xff0c;txt文件&#xff0c;excel文件...都是文…

向量方法證明正余弦定理的數學理論體系

向量方法證明正余弦定理的數學理論體系 摘要&#xff1a; 向量理論為幾何定理的證明提供了強有力的代數化工具。本文基于向量空間的基本概念與運算性質&#xff0c;嚴格推導平面幾何中的正弦定理與余弦定理。通過建立系統的向量表示框架&#xff0c;將幾何關系轉化為向量運算&a…