1833.雪糕的最大数量:桶排序
【LetMeFly】1833.雪糕的最大数量:桶排序
力扣题目链接:https://leetcode.cn/problems/maximum-ice-cream-bars/
夏日炎炎,小男孩 Tony 想买一些雪糕消消暑。
商店中新到 n 支雪糕,用长度为 n 的数组 costs 表示雪糕的定价,其中 costs[i] 表示第 i 支雪糕的现金价格。Tony 一共有 coins 现金可以用于消费,他想要买尽可能多的雪糕。
注意:Tony 可以按任意顺序购买雪糕。
给你价格数组 costs 和现金量 coins ,请你计算并返回 Tony 用 coins 现金能够买到的雪糕的 最大数量 。
你必须使用计数排序解决此问题。
示例 1:
输入:costs = [1,3,2,4,1], coins = 7 输出:4 解释:Tony 可以买下标为 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 。
提示:
costs.length == n1 <= n <= 1051 <= costs[i] <= 1051 <= coins <= 108
解题方法:桶排序
这道题思路很简单,就是尽可能买便宜的雪糕。主要是题目中还有这么一句“你必须使用计数排序解决此问题”,好,那就使用桶排序来解决吧。
数据范围$1\leq costs[i]\leq 10^5$,所以开辟一个长度为$100001$的数组$bin$就好,其中$bin[i]$代表价格为$i$的雪糕的出现次数。
初始化bin数组中每个元素为0 ,遍历价格数组,假设出现了价格为$t$的雪糕,就令$bin[t]$加一。
得到桶排序数组后,从$1$到$10^5$遍历$bin$桶,当剩余金币小于当前雪糕价格时结束遍历。
对于价格为$t$的雪糕(共有$bin[t]$个),剩余金币为$coins$时,一共可以购买$\min(bin[t], \lfloor\frac{coins}{t}\rfloor)$个。
- 时间复杂度$O(n+\max{coins[i]})$
- 空间复杂度$O(\max{coins[i]})$
AC代码
C++
1 | |
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源
1833.雪糕的最大数量:桶排序
https://blog.letmefly.xyz/2026/06/21/LeetCode 1833.雪糕的最大数量/