🔗 题目链接:1833. 雪糕的最大数量
📚 所属题单:灵茶山艾府 · 贪心算法题单 --- §1.1 从最小/最大开始贪心
🏷️ 难度:Medium | 难度分:1253
🔖 标签:贪心、数组、排序
📖 题目描述
商店中新到 n 支雪糕,用数组 costs 表示每支雪糕的价格。Tony 一共有 coins 现金,想买尽可能多的雪糕(按任意顺序)。
返回 Tony 能买到的雪糕的最大数量。
示例 1
输入:costs = [1,3,2,4,1], coins = 7
输出:4
解释:买下标 0、1、2、4 的雪糕,总价 1+3+2+1=7
示例 2
输入:costs = [10,6,8,7,7,8], coins = 5
输出:0
解释:买不起任何一支雪糕。
示例 3
输入:costs = [1,6,3,1,2,5], coins = 20
输出:6
解释:可以买下所有雪糕,总价 18。
提示
1 <= n <= 10^51 <= costs[i] <= 10^51 <= coins <= 10^8
💡 思路分析
想买最多的雪糕 → 先挑便宜的买!
排序后从最便宜的开始拿,一支一支买到钱花完。这不就是逛超市抢打折品的最优策略嘛 🍦
算法步骤
- 排序:价格从小到大排
- 贪心购买:依次买最便宜的,每买一支扣钱,钱不够就停
✅ 代码实现(Java)
java
class Solution {
public int maxIceCream(int[] costs, int coins) {
// 排序:从便宜到贵
Arrays.sort(costs);
int count = 0;
for (int cost : costs) {
if (coins >= cost) {
coins -= cost;
count++;
} else {
break; // 钱不够了
}
}
return count;
}
}
📊 复杂度分析
| 复杂度 | 说明 | |
|---|---|---|
| ⏱️ 时间 | O(n log n) | 排序 |
| 💾 空间 | O(log n) | 排序栈空间 |
🔗 参考
🍦 买雪糕的最优策略 = 先买便宜的。贪心题做到这里,模式已经非常清晰了:排序 + 从最小/最大开始遍历。