貪心算法Day4學習心得

先來看第一道:860. 檸檬水找零 - 力扣(LeetCode)

有如下三種情況:

  • 情況一:賬單是5,直接收下。
  • 情況二:賬單是10,消耗一個5,增加一個10
  • 情況三:賬單是20,優先消耗一個10和一個5,如果不夠,再消耗三個5

此時大家就發現 情況一,情況二,都是固定策略,都不用我們來做分析了,而唯一不確定的其實在情況三。

而情況三邏輯也不復雜甚至感覺純模擬就可以了,其實情況三這里是有貪心的。

賬單是20的情況,為什么要優先消耗一個10和一個5呢?

因為美元10只能給賬單20找零,而美元5可以給賬單10和賬單20找零,美元5更萬能!

所以局部最優:遇到賬單20,優先消耗美元10,完成本次找零。全局最優:完成全部賬單的找零。

局部最優可以推出全局最優,并找不出反例,那么就試試貪心算法!

C++代碼如下:

class Solution {
public:bool lemonadeChange(vector<int>& bills) {int five = 0, ten = 0, twenty = 0;for (int bill : bills) {// 情況一if (bill == 5) five++;// 情況二if (bill == 10) {if (five <= 0) return false;ten++;five--;}// 情況三if (bill == 20) {// 優先消耗10美元,因為5美元的找零用處更大,能多留著就多留著if (five > 0 && ten > 0) {five--;ten--;twenty++; // 其實這行代碼可以刪了,因為記錄20已經沒有意義了,不會用20來找零} else if (five >= 3) {five -= 3;twenty++; // 同理,這行代碼也可以刪了} else return false;}}return true;}
};

然后看第二道:406. 根據身高重建隊列 - 力扣(LeetCode)

按照身高排序之后,優先按身高高的people的k來插入,后序插入節點也不會影響前面已經插入的節點,最終按照k的規則完成了隊列。

所以在按照身高從大到小排序后:

局部最優:優先按身高高的people的k來插入。插入操作過后的people滿足隊列屬性

全局最優:最后都做完插入操作,整個隊列滿足題目隊列屬性

C++代碼如下:

class Solution {
public:static bool cmp(const vector<int>& a, const vector<int>& b) {if (a[0] == b[0]) return a[1] < b[1];return a[0] > b[0];}vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort (people.begin(), people.end(), cmp);vector<vector<int>> que;for (int i = 0; i < people.size(); i++) {int position = people[i][1];que.insert(que.begin() + position, people[i]);}return que;}
};

然后看最后一道:452. 用最少數量的箭引爆氣球 - 力扣(LeetCode)

這道題好像原來寫過。

部分最優:當氣球出現重疊,一起射,所用弓箭最少。全局最優:把所有氣球射爆所用弓箭最少。

算法確定下來了,那么如何模擬氣球射爆的過程呢?是在數組中移除元素還是做標記呢?

如果真實的模擬射氣球的過程,應該射一個,氣球數組就remove一個元素,這樣最直觀,畢竟氣球被射了。

但仔細思考一下就發現:如果把氣球排序之后,從前到后遍歷氣球,被射過的氣球僅僅跳過就行了,沒有必要讓氣球數組remove氣球,只要記錄一下箭的數量就可以了。

以上為思考過程,已經確定下來使用貪心了,那么開始解題。

為了讓氣球盡可能的重疊,需要對數組進行排序

那么按照氣球起始位置排序,還是按照氣球終止位置排序呢?

其實都可以!只不過對應的遍歷順序不同,我就按照氣球的起始位置排序了。

既然按照起始位置排序,那么就從前向后遍歷氣球數組,靠左盡可能讓氣球重復。

從前向后遍歷遇到重疊的氣球了怎么辦?

如果氣球重疊了,重疊氣球中右邊邊界的最小值 之前的區間一定需要一個弓箭

class Solution {
private:static bool cmp(const vector<int>& a, const vector<int>& b) {return a[0] < b[0];}
public:int findMinArrowShots(vector<vector<int>>& points) {if (points.size() == 0) return 0;sort(points.begin(), points.end(), cmp);int result = 1; // points 不為空至少需要一支箭for (int i = 1; i < points.size(); i++) {if (points[i][0] > points[i - 1][1]) {  // 氣球i和氣球i-1不挨著,注意這里不是>=result++; // 需要一支箭}else {  // 氣球i和氣球i-1挨著points[i][1] = min(points[i - 1][1], points[i][1]); // 更新重疊氣球最小右邊界}}return result;}
};

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

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

相關文章

接口自動化測試種涉及到接口依賴怎么辦?

《接口自動化測試中接口依賴的處理方式及選擇原則》在接口自動化測試中&#xff0c;接口依賴是指某個接口的請求參數、執行條件或測試結果依賴于其他接口的輸出&#xff08;如返回數據、狀態等&#xff09;。處理接口依賴是確保測試用例準確性和穩定性的關鍵&#xff0c;常見的…

hive分區表臨時加載日批數據文件

源系統每日上傳一個csv數據文件到數據中臺指定目錄&#xff0c;數據中臺用hive表進行ETL工作。 先建一個外部分區表&#xff1a; create external table tmp_lease_contract ( contract_id string, vin string, amount float ) partitioned by (dt string) row format delim…

Python關于pandas的基礎知識

一.掃盲&#xff08;一&#xff09;、pandas 是什么pandas 是 Python 的一個第三方數據處理庫&#xff0c;它提供了高效、靈活的數據結構&#xff08;如 Series 和 DataFrame&#xff09;&#xff0c;能方便地對結構化數據進行清洗、轉換、分析和處理。&#xff08;二&#xff…

React 英語單詞補全游戲——一個寓教于樂的英語單詞記憶游戲

預覽&#xff1a;英語單詞補全 &#x1f4d6; 產品概述 英語單詞大冒險是一款專為 7-12 歲兒童設計的互動式英語學習游戲。通過聽音頻、補全單詞的游戲方式&#xff0c;讓孩子在輕松愉快的環境中提升英語詞匯能力和聽力水平。 &#x1f3af; 核心價值主張 寓教于樂: 將枯燥…

我的第一個開源項目 -- 實時語音識別工具

這是我的第一個開源項目&#xff0c;是我一直想做的一個小工具&#xff1a; 端到端實時語音轉文字系統。 通過小程序和H5頁面&#xff0c;用戶可以實時采錄音頻&#xff0c;通過ws上傳到java的netty server。 Java在經過權限驗證、流量控制等操作之后&#xff0c;通過gRPC流…

AG32 mcu+cpld 聯合編程(概念及流程)

在使用mcucpld聯合編程之前&#xff0c;請確認已經熟練掌握mcu的使用方法&#xff0c;并且對cpld編程&#xff08;verilog語言&#xff09;有一定的基礎。 另外&#xff0c;對AHB總線也需要有一定的了解。 這個章節分為兩部分&#xff1a; 第一部分&#xff0c;展示聯合編程…

Hadoop調度器深度解析:FairScheduler與CapacityScheduler的優化策略

Hadoop調度器概述在大數據處理的生態系統中&#xff0c;Hadoop作為分布式計算框架的核心&#xff0c;其資源調度機制直接決定了集群的吞吐效率和作業執行公平性。調度器作為Hadoop資源管理的中樞神經&#xff0c;通過協調計算資源與任務需求之間的動態平衡&#xff0c;成為支撐…

怎么自己搭建云手機

用閑置電腦搭建云手機 確保電腦安裝 Ubuntu 20.04&#xff08;或其他支持Docker的Linux系統&#xff09;。 安裝 Docker&#xff08;運行云手機的核心工具&#xff09;安裝Redroid&#xff08;安卓容器&#xff09;運行安卓容器就歐克啦。 用云服務器搭建&#xff08;適合長…

網關:數據翻譯、中轉、協議轉換與邊緣計算

網關&#xff08;Gateway&#xff09;詳解&#xff1a;翻譯與中轉站的核心作用 在計算機網絡中&#xff0c;網關&#xff08;Gateway&#xff09;是一個非常重要的概念。它本質上是一個“翻譯中轉站”&#xff0c;其主要作用是將不同網絡之間的數據進行“翻譯”&#xff0c;并確…

UE5多人MOBA+GAS 番外篇:使用ECC(UGameplayEffectExecutionCalculation)制作傷害計算的流程

文章目錄定義一些屬性用于作為傷害基礎還有獲取要打出去的傷害創建一個ECC&#xff08;里面執行傷害的計算&#xff09;在執行ECC的GE之前需要修改ECC需要調用的值&#xff0c;也可以不改直接計算在屬性中監聽ECC輸出的那個值然后處理扣血定義一些屬性用于作為傷害基礎還有獲取…

SpringBoot實戰0-5

接口文檔&#xff1a;通俗的講&#xff0c;接口文檔能告訴開發者接口能返回的數據&#xff0c;以及為了獲取這些數據&#xff0c;開發者需要輸入什么樣的數據&#xff0c;請求哪個接口&#xff08;即規范&#xff09;為什么使用接口文檔&#xff1a;1、項目開發過程中前后端工程…

二、SpringBoot-REST開發

rest開發&#xff08;表現形式轉換&#xff09;&#xff1a; 1、優點&#xff1a;隱藏訪問資源的行為&#xff0c;無法通過地址得知對資源是何種操作&#xff0c;書寫簡化 2、GET查詢 POST 新增/保存 PUT&#xff08;修改/更新&#xff09; DELETE&#xff08;刪除&#xff09;…

大數據之路:阿里巴巴大數據實踐——離線數據開發

數據開發平臺 統一計算平臺MaxCompute&#xff1a;主要服務于海量數據的存儲和計算 &#xff0c;提供完善的數據導入方案&#xff0c; 以及多種經典的分布式計算模型&#xff0c;提供海量數據倉庫的解決方案&#xff0c;能夠更快速地解決用戶的海量數據計算問題&#xff0c;有效…

我的網頁聊天室設計

一、需求分析1.用戶管理模塊注冊功能實現一個注冊頁面。注冊頁面上包含了一個輸入框&#xff0c;輸入用戶名和密碼. 注冊成功后可以跳轉到登錄頁面.登錄功能實現一個登錄頁面。登錄頁面上包含一個輸入框。輸入用戶名和密碼. 登錄成功后可以跳轉到主頁面.2.主界面用戶信息左上角…

數據結構自學Days10 -- 二叉樹的常用實現

? 一、為什么要學習二叉樹&#xff1f; 1. &#x1f4e6; 組織數據的高效方式 二叉樹可以快速插入、刪除、查找數據&#xff0c;尤其在平衡時&#xff0c;時間復雜度為 $O(\log n)$。 適合表示分層結構&#xff08;如組織結構、文件系統、語法樹&#xff09;。 2. &#x…

Java注解家族--`@ResponseBody`

ResponseBody ResponseBody是 Spring 框架中的一個注解&#xff0c;在基于 Spring 的 Web 開發中扮演著重要角色&#xff0c;以下是對它的詳細總結&#xff1a; 1.定義與基本功能 定義&#xff1a;ResponseBody注解用于將 Controller 方法的返回值&#xff0c;通過適當的 HttpM…

react-window 大數據列表和表格數據渲染組件之虛擬滾動

簡介 React Window 是一個高效的 React 組件庫&#xff0c;專為渲染大數據列表和表格數據而設計。它通過”虛擬化”技術&#xff08;也稱為”窗口化”或”列表虛擬化”&#xff09;解決了在 React 應用中渲染大量數據時的性能問題。與傳統方法不同&#xff0c;React Window 只…

Eltable tree形式,序號列實現左對齊,并且每下一層都跟上一層的錯位距離拉大

要的是如圖所示效果序號加個class-name寫樣式然后給eltable加indent屬性就可以了&#xff0c;我設置的25

FOC算法中SIMULINK一些常用模塊(2)-Permanent Magnet Synchronous Machine模塊

一&#xff0c;介紹這三個模塊一起介紹了&#xff0c;由左到右&#xff0c;分別是電源模塊&#xff0c;驅動模塊和電機模塊。主要介紹一下電機模塊二&#xff0c;DC Voltage SourceDC Voltage Source 模塊是用于表示直流電壓源的基本組件&#xff0c;可以提供恒流直壓&#xff…

RPG62.制作敵人攻擊波數二:攻擊ui

1。經典創建userwidget&#xff0c;使用xmbtextblock&#xff0c;結構如下。然后設置動畫與音頻&#xff0c;上下的參數是一樣的&#xff0c;轉到圖表打開BP_SurvialGameMode2.再創建一個widget&#xff0c;結構如下新添的動畫打開XMBGameModeBase&#xff0c;創建構造函數AXMB…