# Maximum ice cream bars

January 6, 2023

greedy heapProblem 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)`