【沖沖沖】貪心來當(dāng)leetcode CEO

假設(shè) 力扣(LeetCode)即將開始 IPO 。為了以更高的價格將股票賣給風(fēng)險投資公司,力扣 希望在 IPO 之前開展一些項目以增加其資本。 由于資源有限,它只能在 IPO 之前完成最多 k 個不同的項目愧旦。幫助 力扣 設(shè)計完成最多 k 個不同項目后得到最大總資本的方式。

給你 n 個項目定罢。對于每個項目 i 笤虫,它都有一個純利潤 profits[i] ,和啟動該項目需要的最小資本 capital[i] 祖凫。

最初琼蚯,你的資本為 w 。當(dāng)你完成一個項目時惠况,你將獲得純利潤遭庶,且利潤將被添加到你的總資本中。

總而言之稠屠,從給定項目中選擇 最多 k 個不同項目的列表峦睡,以 最大化最終資本 ,并輸出最終可獲得的最多資本权埠。

答案保證在 32 位有符號整數(shù)范圍內(nèi)榨了。

示例 1:

輸入:k = 2, w = 0, profits = [1,2,3], capital = [0,1,1] 輸出:4 解釋: 由于你的初始資本為 0,你僅可以從 0 號項目開始攘蔽。 在完成后龙屉,你將獲得 1 的利潤,你的總資本將變?yōu)?1满俗。 此時你可以選擇開始 1 號或 2 號項目转捕。 由于你最多可以選擇兩個項目作岖,所以你需要完成 2 號項目以獲得最大的資本。 因此五芝,輸出最后最大化的資本痘儡,為 0 + 1 + 3 = 4。

來源:力扣(LeetCode)

讀題

  1. 最多做 k 個不同項目
  2. 做項目不花錢枢步,只看自己的錢夠不夠成本谤辜。w >= capital[i]
    要求:最大化的最終持有資本。

讀完題价捧,就一個感覺,要干就干最能掙錢的涡戳,這不是讓我貪心嗎结蟋?好家伙,沖沖沖...

解題思路

講個故事先

你是 LeetCode CEO渔彰,將要走向巔峰 IPO嵌屎,為了想拉高股票價格多(割)賺(韭)錢(cai),你要在限定項目次數(shù)內(nèi)盡可能的多掙錢恍涂。

你的初始資本為 w宝惰,做項目空手套白狼不花錢。需要注意的是你的資本 w 需要 >= 想干項目所需的成本再沧,這項目只能干一次尼夺。

  1. 首先,你只能干 k 個項目炒瘸。那肯定得每次干的項目都得最賺錢淤堵,這樣你的資本 w 就增長,持有資本越多就能干更大更賺錢的項目顷扩。
  2. 好拐邪,咱來干第一票,得選所有能干的項目中最賺錢的隘截,咋辦扎阶? 先把項目按照所需資本從小到大 sort 一下。然后做最賺錢的那個項目婶芭。咱做了最賺錢的項目东臀,空手套白狼,不花錢犀农。同時呢啡邑,咱初始資產(chǎn) + 這第一票賺的錢,持有資本增長了井赌,那不得趕緊物色下一個最賺錢的谤逼。
  3. 之后操作就像這第一票一樣贵扰,直到干完 k 次。
  4. done流部,你本次臨時當(dāng) CEO 所持有的的最終最大資本就出來了戚绕。
回到代碼層面
  1. 上邊小故事里說了要把項目所需資金從小到大排序一下。
  2. 用一個優(yōu)先隊列priority_queue<int> q枝冀,每次循環(huán)時候?qū)㈨椖克栀Y金小于所持資本 w 的項目利潤放入優(yōu)先隊列 q舞丛,自動排序。每次取 q 的 top()果漾,更新 w球切。然后如是這般循環(huán) k 次即可。

貪心其實就是像這樣每一個小階段局部最優(yōu)绒障,然后就可以推到全局最優(yōu)吨凑。就像這題每次干最賺錢的,最后就能得到最大持有資本户辱。

PS:

  • Q: C++ sort 對 vector<pair<int, int>> 優(yōu)先比較 pair.first鸵钝,然后比較 pair.second ?
  • A: std::sort 可以不寫比較函數(shù),不寫排序函數(shù)的話就用 operator< 來比較庐镐。而 std::pair::operator< 按標(biāo)準(zhǔn)恩商,兩個 std::pair 的 first 為第一優(yōu)先級,second 為第二優(yōu)先級必逆。
template <class _Ty1, class _Ty2>
_NODISCARD constexpr bool operator<(const pair<_Ty1, _Ty2>& _Left, const pair<_Ty1, _Ty2>& _Right) {
    return _Left.first < _Right.first || (!(_Right.first < _Left.first) && _Left.second < _Right.second);
}

代碼

class Solution {
public:
    int findMaximizedCapital(int k, int w, vector<int>& profits, vector<int>& capital) {
        vector<pair<int, int>> info;
        int size = profits.size();
        for(int i = 0; i < size; i++) {
            info.push_back({capital[i], profits[i]});
        }

        sort(info.begin(), info.end());
        priority_queue<int> q;
        int idx = 0, iSize = info.size();
        while(k--){
            while(idx < iSize && w >= info[idx].first) {
                q.push(info[idx++].second); 
            }
            if(q.empty()) {
                break; 
            }else {
                w += q.top(); 
                q.pop();
            }
        }
        return w;
    }
};

補充&鳴謝

在此非常感謝代碼隨想錄怠堪。這位老哥的 leetcode 刷題筆記分類整理不同算法類型,也有不同語言版本名眉,對于菜雞的我來說幫助很大研叫。

另外,我也整了個刷題筆記璧针,堅持費曼學(xué)習(xí)法嚷炉,吃進去,產(chǎn)出來探橱。

如果感覺本題解對你有幫助申屹,請不要吝嗇點贊????啊 沖沖沖...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市隧膏,隨后出現(xiàn)的幾起案子哗讥,更是在濱河造成了極大的恐慌,老刑警劉巖胞枕,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杆煞,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機决乎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門队询,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人构诚,你說我怎么就攤上這事蚌斩。” “怎么了范嘱?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵送膳,是天一觀的道長。 經(jīng)常有香客問我丑蛤,道長叠聋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任受裹,我火速辦了婚禮碌补,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘名斟。我一直安慰自己,他們只是感情好魄眉,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布砰盐。 她就那樣靜靜地躺著,像睡著了一般坑律。 火紅的嫁衣襯著肌膚如雪岩梳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天晃择,我揣著相機與錄音冀值,去河邊找鬼。 笑死宫屠,一個胖子當(dāng)著我的面吹牛列疗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浪蹂,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼抵栈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了坤次?” 一聲冷哼從身側(cè)響起古劲,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缰猴,沒想到半個月后产艾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年闷堡,在試婚紗的時候發(fā)現(xiàn)自己被綠了隘膘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡缚窿,死狀恐怖棘幸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情倦零,我是刑警寧澤误续,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站扫茅,受9級特大地震影響蹋嵌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜葫隙,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一栽烂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恋脚,春花似錦腺办、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至船响,卻和暖如春躬拢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背见间。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工聊闯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人米诉。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓菱蔬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親史侣。 傳聞我的和親對象是個殘疾皇子汗销,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 匯總幾個常見的貪心算法實現(xiàn)的問題 概述 IPO(最大投資收益) 金磚最小分割代價 會議室相關(guān)問題 分發(fā)糖果 檸檬水...
    yaco閱讀 1,437評論 0 2
  • 502. IPO 給定若干個項目。對于每個項目 i抵窒,它都有一個純利潤 Pi弛针,并且需要最小的資本 Ci 來啟動相應(yīng)的...
    李海游閱讀 145評論 0 0
  • 502 IPO IPO Description:Suppose LeetCode will start its I...
    air_melt閱讀 260評論 0 1
  • 萌礦主起家之前傳。 導(dǎo)語:資本永不眠李皇,金錢是流動的餓鬼削茁,饑渴難耐宙枷,永不滿足的攫取利潤。只有窮過茧跋,才知金錢短缺的饑渴...
    萌礦主閱讀 598評論 0 0
  • 貨幣 亞當(dāng)· 斯密論分工慰丛。分工能增進生產(chǎn)力的原因:1.使人們的技藝日進;2.節(jié)約從一個工種轉(zhuǎn)換到另一個工種的時間瘾杭;...
    開過頭先生閱讀 1,443評論 0 0