概述
题目地址:力扣
题目表述
给你一个下标从 0 开始的正整数数组 candiesCount ,其中 candiesCount[i] 表示你拥有的第 i 类糖果的数目。同时给你一个二维数组 queries ,其中 queries[i] = [favoriteTypei, favoriteDayi, dailyCapi] 。
你按照如下规则进行一场游戏:
你从第 0 天开始吃糖果。
你在吃完 所有 第 i - 1 类糖果之前,不能 吃任何一颗第 i 类糖果。
在吃完所有糖果之前,你必须每天 至少 吃 一颗 糖果。
请你构建一个布尔型数组 answer ,满足 answer.length == queries.length 。answer[i] 为 true 的条件是:在每天吃 不超过 dailyCapi 颗糖果的前提下,你可以在第 favoriteDayi 天吃到第 favoriteTypei 类糖果;否则 answer[i] 为 false 。注意,只要满足上面 3 条规则中的第二条规则,你就可以在同一天吃不同类型的糖果。
请你返回得到的数组 answer 。
输入:candiesCount = [5,2,6,4,1], queries = [[3,1,2],[4,10,3],[3,10,100],[4,100,30],[1,3,1]]
输出:[false,true,true,false,false]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/can-you-eat-your-favorite-candy-on-your-favorite-day
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路::
- 前缀和计算节省后面多组数据时间
- 注意数据范围爆
int
- 先计算可以吃的范围=>
1*天数->最高要求*天数
,这里注意天数从零开始 - 再计算
i
天需要的范围前缀和=>S[i]->S[i+1]
,这里注意边界判断 - 两个范围交集存在即可
代码::
class Solution {
public:
vector<bool> canEat(vector<int>& candiesCount, vector<vector<int>>& queries) {
//前缀和:
vector<long long> cand_ans;
vector<bool> ans;
long long i = 0;
cand_ans.push_back(i);
for(auto j:candiesCount)
{
i += j;
cand_ans.push_back(i);
}
for(i = 0; i < queries.size(); ++i)
{
long long l=queries[i][0]==0?1:cand_ans[queries[i][0]]+1;
ans.push_back(!(queries[i][1]+1>cand_ans[queries[i][0]+1]||(long long)(queries[i][1]+1)*queries[i][2]<l));
}
return ans;
}
};
结果::
最后
以上就是勤恳夕阳为你收集整理的[每日一题]吃糖果(前缀和+区间)的全部内容,希望文章能够帮你解决[每日一题]吃糖果(前缀和+区间)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复