1833.雪糕的最大數(shù)量 基礎(chǔ)排序、棧操作、堆排序 三解so easy!

1833.雪糕的最大數(shù)量

https://leetcode-cn.com/problems/maximum-ice-cream-bars/solution/5735xue-gao-de-zui-da-shu-liang-zhe-chon-kt3f/

難度:中等

題目

夏日炎炎,小男孩 Tony 想買一些雪糕消消暑。

商店中新到 n 支雪糕,用長度為 n 的數(shù)組 costs 表示雪糕的定價,其中 costs[i] 表示第 i 支雪糕的現(xiàn)金價格。Tony 一共有 coins 現(xiàn)金可以用于消費(fèi),他想要買盡可能多的雪糕。

給你價格數(shù)組 costs 和現(xiàn)金量 coins ,請你計算并返回 Tony 用 coins 現(xiàn)金能夠買到的雪糕的 最大數(shù)量 。

注意:Tony 可以按任意順序購買雪糕。

提示:

  • costs.length == n
  • 1 <= n <= 10 ^ 5
  • 1 <= costs[i] <= 10 ^ 5
  • 1 <= coins <= 10 ^ 8

示例

示例 1:
輸入:costs = [1,3,2,4,1], coins = 7
輸出:4
解釋:Tony 可以買下標(biāo)為 0、1、2、4 的雪糕,總價為 1 + 3 + 2 + 1 = 7

示例 2:
輸入:costs = [10,6,8,7,7,8], coins = 5
輸出:0
解釋:Tony 沒有足夠的錢買任何一支雪糕。

示例 3:
輸入:costs = [1,6,3,1,2,5], coins = 20
輸出:6
解釋:Tony 可以買下所有的雪糕,總價為 1 + 6 + 3 + 1 + 2 + 5 = 18 。

分析

搞不懂這種題怎么能算作是中等?思路也太過簡單了吧!

簡單排序

  1. 首先我們將雪糕花費(fèi),按照從大到小的方式排列
  2. 循環(huán)雪糕,每次錢幣減去當(dāng)前雪糕的價格
  3. 重復(fù)2操作,當(dāng)錢不足以買雪糕的時候,返回index - 1即可.

棧操作

  1. 首先我們將雪糕花費(fèi),按照逆序排列
  2. 然后開始while循環(huán),錢幣大于等于棧頂,則出棧,雪糕數(shù)+1
  3. 結(jié)束while循環(huán)后,返回結(jié)果即可...

堆排序

  1. 將costs轉(zhuǎn)化為堆
  2. 每次pop堆頂,當(dāng)錢幣小于堆頂時終止操作

解題1.簡單排序

class Solution:
    def maxIceCream(self, costs, coins):
        costs.sort()
        ret = 0
        for index, cost in enumerate(costs):
            coins -= cost
            if coins < 0:
                break
            ret += 1
        return ret        

解題2.棧操作

class Solution:
    def maxIceCream(self, costs, coins):
        costs.sort(reverse=True)
        num = 0
        while costs and coins >= costs[-1]:
            num += 1
            coins -= costs.pop()
        return num

解題2.堆排序

import heapq

class Solution:
    def maxIceCream(self, costs, coins):
        num = 0
        heapq.heapify(costs)
        while costs:
            coins -= heapq.heappop(costs)
            if coins < 0:
                return num
            num += 1
        return num

歡迎關(guān)注我的公眾號: 清風(fēng)Python,帶你每日學(xué)習(xí)Python算法刷題的同時,了解更多python小知識。

我的個人博客:https://qingfengpython.cn

力扣解題合集:https://github.com/BreezePython/AlgorithmMarkdown

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 表情是什么,我認(rèn)為表情就是表現(xiàn)出來的情緒。表情可以傳達(dá)很多信息。高興了當(dāng)然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,877評論 2 7
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險厭惡者,不喜歡去冒險,但是人生放棄了冒險,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 8,156評論 0 4

友情鏈接更多精彩內(nèi)容