题目描述
给你一个下标从 0 开始的正整数数组 candiesCount ,其中 candiesCount[i] 表示你拥有的第 i 类糖果的数目。同时给你一个二维数组 queries ,其中 queries[i] = [favoriteTypei, favoriteDayi, dailyCapi] 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/can-you-eat-your-favorite-candy-on-your-favorite-day
解题分析
采用前缀和的思想,记录前i个类型的糖果数量和sum,注意和会超过int类型范围,需要使用long long类型。然后遍历queries,计算dailyCapi天可以吃的最少糖果量和最大的糖果量,判断是否在favoriteTypei类型的糖果数量中即可。
class Solution {
public:
vector<bool> canEat(vector<int>& candiesCount, vector<vector<int>>& queries) {
vector<bool> ans;
vector<long long> sum(candiesCount.size());
sum[0] = candiesCount[0];
for(int i=1; i<candiesCount.size(); ++i){
sum[i]+=sum[i-1]+candiesCount[i];
}
for(vector<int> querie:queries){
long long favoriteTypei=querie[0],favoriteDayi=querie[1],dailyCapi=querie[2];
long long minCapi=favoriteDayi+1;
long long maxCapi=(long long)dailyCapi*(favoriteDayi+1);
long long preCapi=(favoriteTypei==0 ? 1:sum[favoriteTypei-1]+1);
long long currCapi=sum[favoriteTypei];
ans.push_back(!(preCapi>maxCapi || currCapi<minCapi));
}
return ans;
}
};