我正在尝试这个问题:1833。最大冰淇淋条数从Leetcode:
这是一个闷热的夏日,一个男孩想买冰淇淋酒吧。在商店里,有n个冰淇淋棒。你得到一个数组长度n的成本,其中成本[i]是第i个冰淇淋的价格金条硬币。男孩一开始有硬币可以花,他想去买尽可能多的雪糕。返回最大数量男孩可以用硬币买到的冰淇淋。
注意:男孩可以按任何顺序买雪糕
示例1:
输入:成本=[1,3,2,4,1],硬币= 7
输出:4
解释:男孩能否以1 + 3 +的总价购买指数为0、1、2、4的雪糕2 + 1 = 7
我使用while循环,在代码中如下所示:
class Solution {
public:
int maxIceCream(vector<int>& costs, int coins) {
long long int count = 0;
sort(costs.begin(), costs.end());
int i = 0;
while(coins > 0 && i < costs.size())
{
count++;
coins -= costs[i];
i++;
}
return coins;
}
};
我得到以下错误。有人能告诉我为什么会有这个吗?对于for循环,代码可以很好地工作。第12行:Char 19:运行时错误:有符号整数溢出:1094795588 - -1094795586不能用'int'类型表示(solution.cpp)UndefinedBehaviorSanitizer: undefinedbehavior prog_joined.cpp:21:19
约束条件如下:
costs.length == n
1 <= n <= 10^5
1 <= costs[i] <= 10^5
1 <= coins <= 10^8
在while循环中,你不应该检查钱是否大于零,而应该检查是否可以再买一个冰淇淋如果你不这样做,你可能会花更多的钱。
while(coins - costs[i] > 0 && i < costs.size())
值得注意的是,你返回的是剩余硬币的数量,而不是购买的冰淇淋的数量