Maximum ice cream bars

January 6, 2023

greedy heap

Problem URL: Maximum ice cream bars

We will sort the input costs array, then iterate the array, if the current cost is less than coins, we will update coins to be coins-costs[i], and increment res by 1.

class Solution:
    def maxIceCream(self, costs: List[int], coins: int) -> int:
        res = 0
        for cost in sorted(costs):
            if coins < cost:
                break
            res += 1
            coins -= cost
        return res

Time complexity: O(nlog(n))
Space complexity: O(1)

You can also solve this problem using heap. We will heapify the costs and pop the minimum cost from the heap if the current cost is less than coins, we will update coins to be coins-costs[i], and increment res by 1.

class Solution:
    def maxIceCream(self, costs: List[int], coins: int) -> int:
        res = 0
        heapq.heapify(costs)
        while costs and coins >= costs[0]:
            res += 1
            coins -= heappop(costs)
        return res

Time complexity: O(nlog(n))
Space complexity: O(n)