【反悔貪心 反悔堆】1642. 可以到達的最遠建筑

本文涉及知識點

反悔貪心 反悔堆

LeetCode1642. 可以到達的最遠建筑

給你一個整數數組 heights ,表示建筑物的高度。另有一些磚塊 bricks 和梯子 ladders 。
你從建筑物 0 開始旅程,不斷向后面的建筑物移動,期間可能會用到磚塊或梯子。
當從建筑物 i 移動到建筑物 i+1(下標 從 0 開始 )時:
如果當前建筑物的高度 大于或等于 下一建筑物的高度,則不需要梯子或磚塊
如果當前建筑的高度 小于 下一個建筑的高度,您可以使用 一架梯子 或 (h[i+1] - h[i]) 個磚塊
如果以最佳方式使用給定的梯子和磚塊,返回你可以到達的最遠建筑物的下標(下標 從 0 開始 )。
示例 1:
輸入:heights = [4,2,7,6,9,14,12], bricks = 5, ladders = 1
在這里插入圖片描述

輸出:4
解釋:從建筑物 0 出發,你可以按此方案完成旅程:

  • 不使用磚塊或梯子到達建筑物 1 ,因為 4 >= 2
  • 使用 5 個磚塊到達建筑物 2 。你必須使用磚塊或梯子,因為 2 < 7
  • 不使用磚塊或梯子到達建筑物 3 ,因為 7 >= 6
  • 使用唯一的梯子到達建筑物 4 。你必須使用磚塊或梯子,因為 6 < 9
    無法越過建筑物 4 ,因為沒有更多磚塊或梯子。
    示例 2:
    輸入:heights = [4,12,2,7,3,18,20,3,19], bricks = 10, ladders = 2
    輸出:7
    示例 3:
    輸入:heights = [14,3,19,3], bricks = 17, ladders = 0
    輸出:3
    提示:
    1 <= heights.length <= 105
    1 <= heights[i] <= 106
    0 <= bricks <= 109
    0 <= ladders <= heights.length

反悔貪心(優先梯子)

小根堆heap記錄所有梯子代替的磚塊數,任何位置都嘗試用梯子。梯子不夠,即heap.size() 大于 梯子數時,將代替磚塊最少的梯子換成磚塊。
空間復雜度: O( ladders)
時間復雜度:O(logladders n) n = heights.length

思路

假定有i處需要梯子或磚塊。
{ 全部用梯子 l a d d e r s > = i 需要磚塊最多的 l a d d e r s 處,用梯子,其它用磚 o t h e r \begin{cases} 全部用梯子 &&ladders >= i \\ 需要磚塊最多的ladders處,用梯子,其它用磚 &&other \\ \end{cases} {全部用梯子需要磚塊最多的ladders處,用梯子,其它用磚??ladders>=iother?
前ladders除,全部用梯子。后面的某處需要x塊磚。
{ 棧頂元素右梯子改為磚 反悔 h e a d . t o p ( ) < x x 用磚 o t h e r \begin{cases} 棧頂元素右梯子改為磚 && 反悔 && head.top() < x \\ x用磚 && &&other \\ \end{cases} {棧頂元素右梯子改為磚x用磚??反悔??head.top()<xother?

代碼

核心代碼

class Solution {
public:int furthestBuilding(vector<int>& heights, int bricks, int ladders) {priority_queue<int, vector<int>, greater<>> heap;for (int i = 0; i + 1 < heights.size(); i++) {const int need = heights[i + 1] - heights[i];if (need <= 0) { continue; }heap.emplace(need);if (heap.size() > ladders) {bricks -= heap.top();heap.pop();if (bricks < 0) { return i; }}}return heights.size() - 1;}
};

單元測試

template<class T1, class T2>
void AssertEx(const T1& t1, const T2& t2)
{Assert::AreEqual(t1, t2);
}template<class T>
void AssertEx(const vector<T>& v1, const vector<T>& v2)
{Assert::AreEqual(v1.size(), v2.size());for (int i = 0; i < v1.size(); i++){Assert::AreEqual(v1[i], v2[i]);}
}template<class T>
void AssertV2(vector<vector<T>> vv1, vector<vector<T>> vv2)
{sort(vv1.begin(), vv1.end());sort(vv2.begin(), vv2.end());Assert::AreEqual(vv1.size(), vv2.size());for (int i = 0; i < vv1.size(); i++){AssertEx(vv1[i], vv2[i]);}
}namespace UnitTest
{	vector<int> heights;int bricks,  ladders;TEST_CLASS(UnitTest){public:TEST_METHOD(TestMethod00){heights = { 4,2,7,6,9,14,12 }, bricks = 5, ladders = 1;auto res = Solution().furthestBuilding(heights, bricks, ladders);AssertEx(4, res);}TEST_METHOD(TestMethod01){heights = { 4,12,2,7,3,18,20,3,19 }, bricks = 10, ladders = 2;auto res = Solution().furthestBuilding(heights, bricks, ladders);AssertEx(7, res);}TEST_METHOD(TestMethod02){heights = { 14,3,19,3 }, bricks = 17, ladders = 0;auto res = Solution().furthestBuilding(heights, bricks, ladders);AssertEx(3, res);}TEST_METHOD(TestMethod03){heights = { 253710,459585,71981,223232,977918,148680,123527,250812,260416,554767,473621,88538,966794,644116,865416,590993,550004,374573,105036,568303,460987,24602,757598,519047,263800,315868,963895,266638,598245,713310,489802,364169,742274,973483,807739,253747,564636,472387,598445,675408,626061,527760,922748,244691,41163,108095,953208,54400,191957,182321,801110,526756,11220,560896,782344,565351,570890,931781,511665,108738,357367,853555,674526,388790,686349,554731,102668,335287,461231,496065,489980,525209,693696,140598,784402,564477,743153,156379,370768,94810,121932,338323,972441,553422,865236,627884,673412,16147,858309,802780,150410,657225,761430,916149,644587,364929,661236,207648,507409,209803,663553,296241,51843,758342,448408,310536,733500,390516,580506,313748,729366,961156,766804,752158,713426,946971,433800,611365,806559,950149,831368,871881,132092,644626,150762,487527,365094,316637,684249,740162,605893,272845,416251,905202,984909,602362,424697,686193,566240,159584,600277,767037,211677,441897,586509,965864,393340,497044,881539,145921,159055,866123,603476,657682,284714,85306,470415,534245,641462,472616,159434,421500,843442,634366,625668,444943,657933,129173,914540,215272,598415,457087,437568,490742,172811,212016,435680,599042,789308,279873,689943,369130,618428,524390,877649,118759,60586,37618,20797,492854,946585,583767,944693,62988,358292,708659,23496,966718,557539,131703,358231,215464,771609,375770,855917,147866,543477,786910,760512,468183,542081,373398,979543,126508,361409,842847,872593,746682,893518,457222,978730,161753,697245,205997,363180,807952,795175,808090,462585,658667,186220,858457,923762,700792,294201,584816,514737,261038,327627,205592,221896,444108,979369,129394,44001,790354,353917,72772,330118,360651,635275,849492,966042,843108,158554,406317,995111,147752,121006,486157,678653,217657,4288,573547,820817,164534,921608,308037,373838,385901,343399,813472,58859,346176,68090,539503,322652,958331,832724,585003,75794,228299,31211,302603,601041,362034,300803,347024,650585,172193,876895,603734,165956,796982,786231,738823,562729,158032,364908,988395,775023,671485,424571,572157,623273,772919,914302,661979,920229,614760,934156,511607,889533,382154,82654,973121,549095,639792,412821,305216,74071,571794,969979,932469,335153,898442,938912,729489,872970,874332,8390,345366,901364,245104,315592,895028,533836,427909,737421,161915,510434,768573,179267,237370,562023,650593,869876,544314,464374,701215,789191,746271,871247,385836,788092,890101,286938,367130,635751,295576,607054,913206,556383,512305,253121,461980,951444,192012,897432,140517,842228,924286,268918,765459,344159,347853,592899,247814,379693,421908,295638,672994,774285,78096,886320,998456,10915,581642,549650,905526,186991,586693,320053,829130,465779,191060,238711,415584,273709,35854,55818,305798,667280,334370,121051,665390,230729,51662,904228,971349,7088,567705,265941,380847,760602,280222,351148,518112,609328,381795,46766,301829,886537,338310,130937,813816,446885,126867,578861,996302,56516,316900,648733,457604,903338,974707,336231,878687,776626,583241,353383,591761,438716,892530,231901,959454,915103,50735,453313,519651,940657,68380,38339,339705,19207,844122,483005,582959,592635,870233,208322,862826,598864,989646,583679,219396,371194,111781,493739,313465,383867,545219,171577,761747,992356,973874,497603,976481,136374,138311,918066,787696,929197,589326,801358,944697,28038,211029,752621,210197,491050,939207,254024,145811,767376,922553,796100,15858,899164,950319,728378,563113,532136,705190,290216,359946,214594,327241,641000,385347,786200,700340,576438,227606,498337,451637,425192,286305,472053,335562,587556,683468,290205,997253,868480,320419,392391,128015,674737,410783,136490,46713,154232,574917,904387,99900,490640,268209,994867,135705,390652,412028,404195,490553,184029,624391,836288,619242,570500,367786,908994,934572,226481,281181,469810,376226,354931,55711,43299,487568,853741,556475,842100,133451,371270,820314,735709,859169,992745,981261,506744,573542,544798,335063,71332,345306,551165,522500,148531,323820,525891,571989,109699,540927,391815,383139,528328,941384,577084,148432,537377,589708,613443,589827,688798,501198,304829,719726,181892,891384,237429,447803,49953,555945,69576,765896,194628,866362,533750,798399,369884,258270,964160,796047,420697,486470,781692,825420,689886,392317,278581,151823,184594,295461,723312,604322,248126,43623,91154,600821,55136,709242,990838,263827,564093,735641,174057,932157,750399,807534,338221,830644,171022,156968,351523,814982,403402,975555,955973,400091,523040,382185,577810,257717,544345,243199,509472,450948,839442,387377,553239,145202,822954,478559,487143,514465,587609,575770,547307,386320,410846,81519,599793,874316,730403,913822,800625,96868,913119,843783,699,767204,432828,496436,348230,767865,455134,266270,324004,863226,758456,66451,431182,641607,514915,522399,164590,335706,829719,724524,981933,812770,192582,880771,71867,704720,691726,761694,868674,964177,287148,124076,155241,535262,856554,108951,453851,597675,592745,32413,774791,750298,66826,876820,567338,699491,336474,60148,776819,430070,546456,564666,776689,886534,68830,749993,157504,933346,39836,417088,481438,30183,515310,764031,876787,321614,765291,466180,941767,877507,658149,60699,413225,849839,376668,689777,491763,712459,5768,608757,161358,554199,132368,464770,89566,309794,430979,979239,62376,354441,582188,947427,569030,430121,826059,562654,461350,901008,191328,484599,615686,859104,366550,140695,229053,282037,289028,296120,883539,980557,365526,143257,658629,730361,683520,101817,442395,50455,199765,137552,653983,47041,102020,308470,523274,447051,345263,967056,525031,506873,170405,995568,977216,83193,279492,376521,946443,847471,845107,321145,866307,523882,135730,824806,927733,605908,580895,177233,443804,914175,905847,661407,483093,518439,789231,66585,447439,14824,861841,89137,913636,194682,166773,212398,259259,160638,435374,941416,140851,311224,54813,155003,595354,742575,668942,77310,96783,217826,211522,116834,391751,922905,730508,225636,265187,995541,329461,244649,951125,322487,140958,608238,511144,410963,335698,228967,487748,382037,261094,363854,557078,539851,519352,364988,444038,284404,730251,828294,608545,188095,466810,46659,673970,142329,93794,167913,30119,116528,592075,810599,14144,445947,51745,236481,878706,838520,310352,112640,612690,663852,546444,818881,868195,573845,390221,254379 }, bricks = 33671263, ladders = 108;auto res = Solution().furthestBuilding(heights, bricks, ladders);AssertEx(589, res);}};
}

反悔貪心(優先磚塊)

大根堆記錄各處使用磚塊的數量,如果磚塊不夠。則將需要最多的磚塊換成梯子。梯子不夠時,就不能再跳了。

class Solution {
public:int furthestBuilding(vector<int>& heights, int bricks, int ladders) {priority_queue<int> heap;for (int i = 0; i + 1 < heights.size(); i++) {const int need = heights[i + 1] - heights[i];if (need <= 0) { continue; }bricks -= need;heap.emplace(need);if (bricks < 0) {bricks += heap.top();heap.pop();ladders--;if (ladders < 0) { return i; }}}return heights.size() - 1;}
};

二分查找

本題也可以用二分查找。

擴展閱讀

視頻課程

先學簡單的課程,請移步CSDN學院,聽白銀講師(也就是鄙人)的講解。
https://edu.csdn.net/course/detail/38771

如何你想快速形成戰斗了,為老板分憂,請學習C#入職培訓、C++入職培訓等課程
https://edu.csdn.net/lecturer/6176

相關推薦

我想對大家說的話
《喜缺全書算法冊》以原理、正確性證明、總結為主。
按類別查閱鄙人的算法文章,請點擊《算法與數據匯總》。
有效學習:明確的目標 及時的反饋 拉伸區(難度合適) 專注
聞缺陷則喜(喜缺)是一個美好的愿望,早發現問題,早修改問題,給老板節約錢。
子墨子言之:事無終始,無務多業。也就是我們常說的專業的人做專業的事。
如果程序是一條龍,那算法就是他的是睛

測試環境

操作系統:win7 開發環境: VS2019 C++17
或者 操作系統:win10 開發環境: VS2022 C++17
如無特殊說明,本算法用**C++**實現。

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

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

相關文章

Spring Boot中的全局異常處理

Spring Boot中的全局異常處理 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將探討如何在Spring Boot應用中實現全局異常處理&#xff0c;這是保證應用…

VSCode, 請在windows下使用git bash終端

用vscode在windows下調測代碼&#xff0c;運行時默認打開的終端是windows的cmd&#xff0c;很不受我待見。畢竟習慣了linux&#xff0c;習慣了windows下的git bash風格。怎么辦&#xff1f; search&#xff0c;search&#xff0c;research。 先確保windows上安裝了git bash。…

MATLAB 2024b 更新了些什么?

MATLAB 2024b版本已經推出了預覽版&#xff0c;本期介紹一些MATLAB部分的主要的更新內容。 幫助瀏覽器被移除 在此前的版本&#xff0c;當我們從MATLAB中訪問幫助文檔時&#xff0c;默認會通過MATLAB的幫助瀏覽器&#xff08;Help browser&#xff09;。 2024b版本開始&…

【Unity數據交互】如何Unity中讀取Ecxel中的數據

&#x1f468;?&#x1f4bb;個人主頁&#xff1a;元宇宙-秩沅 &#x1f468;?&#x1f4bb; hallo 歡迎 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;?&#x1f4bb; 本文由 秩沅 原創 &#x1f468;?&#x1f4bb; 專欄交流&#x1f9e7;&…

醫院掛號系統小程序的設計

管理員賬戶功能包括&#xff1a;系統首頁&#xff0c;個人中心&#xff0c;患者管理&#xff0c;醫生管理&#xff0c;專家信息管理&#xff0c;科室管理&#xff0c;預約信息管理&#xff0c;系統管理 微信端賬號功能包括&#xff1a;系統首頁&#xff0c;專家信息&#xff0…

數據結構算法-排序(一)-冒泡排序

什么是冒泡排序 冒泡排序&#xff1a;在原數組中通過相鄰兩項元素的比較&#xff0c;交換而完成的排序算法。 算法核心 數組中相鄰兩項比較、交換。 算法復雜度 時間復雜度 實現一次排序找到最大值需要遍歷 n-1次(n為數組長度) 需要這樣的排序 n-1次。 需要 (n-1) * (n-1) —…

Java事務(Transaction)

Java事務&#xff08;Transaction&#xff09;是數據庫管理系統執行過程中的一個邏輯單位&#xff0c;由一個有限的數據庫操作序列組成&#xff0c;這些操作要么全部執行&#xff0c;要么全部不執行&#xff0c;是一個不可分割的工作單位。事務的引入主要是為了解決并發操作數據…

Unity中遇到“Input Button unload_long_back_btn is not setup”問題

當你在Unity中遇到“Input Button unload_long_back_btn is not setup”這個問題時&#xff0c;需要按照以下步驟進行處理&#xff1a; 1. 檢查按鈕名稱 確保你在代碼中使用的按鈕名稱&#xff08;unload_long_back_btn&#xff09;與Unity輸入管理器中的配置完全匹配。 2. …

[AIGC] ClickHouse分布式表與本地表的區別及如何查詢所有本地表記錄

在大規模數據處理和分析場景中&#xff0c;ClickHouse是一種高性能的列式數據庫管理系統。ClickHouse支持分布式表和本地表兩種表類型&#xff0c;本文將介紹這兩種表類型的區別&#xff0c;并探討如何建表以查詢所有本地表的記錄。 文章目錄 一、ClickHouse分布式表與本地表的…

【Linux進階】文件系統7——文件系統簡單操作

1.磁盤與目錄的容量 現在我們知道磁盤的整體數據是在超級區塊中&#xff0c;但是每個文件的容量則在inode 當中記載。 那在命令行模式下面該如何顯示這幾個數據&#xff1f;下面就讓我們來談一談這兩個命令&#xff1a; df&#xff1a;列出文件系統的整體磁盤使用量&#xf…

Poker Game, Run Fast

Poker Game, Run Fast 撲克&#xff1a;跑得快 分門別類&#xff1a; 單張從小到大默認 A < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < J < Q < K 跑得快&#xff1a;單張從小到大 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 &…

javaweb個人主頁設計(html+css+js)

目錄 1 前言和要求 1.1 前言 1.2 設計要求 2 預覽 2.1 主頁頁面 2.2 個人簡介 2.3 個人愛好 2.4 個人成績有代碼&#xff0c;但是圖片已省略&#xff0c;可以根據自己情況添加 2.5 收藏夾 3 代碼實現 3.1 主頁 3.2 個人簡介 3.3 個人愛好 3.4 個人成績&#xff…

大數據處理利器:Apache Spark編程基礎與實戰

"大數據處理利器&#xff1a;Apache Spark編程基礎與實戰" 是一個涵蓋了Apache Spark這一強大大數據處理框架的深入學習和實踐指南。Apache Spark是一個快速、通用、可擴展的大數據處理引擎&#xff0c;它提供了高級別的API用于大規模數據處理和分析。下面&#xff0…

求職成功率的算法,與葫蘆娃救爺爺的算法,有哪些相同與不同

1 本節概述 通過在B站百刷葫蘆娃這部兒時劇&#xff0c;我覺得可以從中梳理出一些算法&#xff0c;甚至可以用于求職這個場景。所以&#xff0c;大家可以隨便問我葫蘆娃的一些劇情和感悟&#xff0c;我都可以做一些回答。 2 葫蘆娃救爺爺有哪些算法可言&#xff1f; 我們知道…

身體(body)的覺醒

佛&#xff0c;是一個梵文的漢語音譯詞&#xff0c;指覺醒者。 何謂覺醒&#xff1f;什么的覺醒&#xff1f;其實很簡單&#xff0c;就是身體的覺醒。 佛的另一個名字&#xff0c;叫菩提&#xff0c;佛就是菩提&#xff0c;菩提老祖&#xff0c;就是佛祖。 body&#xff0c;即…

微服務: 初識 Spring Cloud

什么是微服務? 微服務就像把一個大公司拆成很多小部門&#xff0c;每個部門各自負責一塊業務。這樣一來&#xff0c;每個部門都可以獨立工作&#xff0c;即使一個部門出了問題&#xff0c;也不會影響整個公司運作。 什么是Spring Cloud? Spring Cloud 是一套工具包&#x…

Oracle RAC 19c 打補丁至最新版本-19.23.0.0.0

實驗環境-我是從19.0.0.0直接打到19.23.0.0.0&#xff0c;適合剛部署好的集群打補丁直接到最新版本。 查看當前環境 查詢集群中運行的 Oracle Clusterware 軟件的 activex 版 查詢本地節點上二進制文件中存儲的 Oracle Clusterware 軟件的版本 查詢本地服務器上 OHAS 和 Oracle…

U.S.News發布全美最佳本科AI專業排名

10 加州大學圣迭戈分校 University of California, San Diego UCSD的人工智能項目從事廣泛的理論和實驗研究&#xff0c;學校的優勢領域包括機器學習、不確定性下的推理和認知建模。除了理論學習&#xff0c;UCSD教授非常注重把計算機知識運用到自然語言處理、數據挖掘、計算…

20240707 每日AI必讀資訊

&#x1f9e0;中國生成式AI專利數量超過美國 6 倍 - 中國在2014年至2023年期間申請的生成式AI專利數量達到38210個&#xff0c;超過了美國的6倍。 - 騰訊、平安保險集團和百度是GenAI專利數量最多的中國公司。 - 中國的頂級學術機構和技術生態為生成式AI的發展提供了強大支持…

CC2530寄存器編程學習筆記_點燈

下面是我的CC2530的學習筆記之點燈部分。 第一步&#xff1a;分析原理圖 找到需要對應操作的硬件 圖 1 通過這個圖1我們可以找到LED1和LED2連接的引腳&#xff0c;分別是P1_0和P1_1。 第二步 分析原理圖 圖 2 通過圖2 確認P1_0和P1_1引腳連接到LED&#xff0c;并且這些引…