我是靠谱客的博主 勤恳夕阳,最近开发中收集的这篇文章主要介绍[每日一题]吃糖果(前缀和+区间),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目地址:力扣

题目表述

给你一个下标从 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路::

  1. 前缀和计算节省后面多组数据时间
  2. 注意数据范围爆int
  3. 先计算可以吃的范围=>1*天数->最高要求*天数,这里注意天数从零开始
  4. 再计算i天需要的范围前缀和=>S[i]->S[i+1],这里注意边界判断
  5. 两个范围交集存在即可

代码::

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;
    }
};

结果::

在这里插入图片描述

最后

以上就是勤恳夕阳为你收集整理的[每日一题]吃糖果(前缀和+区间)的全部内容,希望文章能够帮你解决[每日一题]吃糖果(前缀和+区间)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部