给你一个下标从 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:每种类型糖果的个数,favoriteType:喜欢的类型,favoriteDayi:喜欢的日子,dailyCapi:每天最多能吃的数量。
当看懂了这四个参数,那么这个题就简单了,我的想法是如果天数大于喜欢糖果类型前的所有类型数量和(每天至少要吃1颗糖,所以天数不能够大于所有糖果的和,如果大于,说明喜欢的糖已经吃完了),或者每天吃最多数量的糖小于喜欢类型糖的总和(如果按照最大的吃法还小于总和,说明糖太多了,吃不到)
class Solution { public boolean[] canEat(int[] candiesCount, int[][] queries) { int n = candiesCount.length; long[] sum = new long[n+1]; for (int i = 1; i <= n; i++) { sum[i] = sum[i-1] + candiesCount[i-1]; } boolean[] res = new boolean[queries.length]; for (int i = 0; i < queries.length; i++) { int type = queries[i][0], day = queries[i][1], dailyCap = queries[i][2]; // 需要吃的糖果的范围 long min = sum[type]+1, max = sum[type+1]; // 在第 day 天能够吃到的糖果的范围 long left = day+1, right = (day + 1) * (long)dailyCap; if (right < min || left > max) { res[i] = false; } else { res[i] = true; } } return res; } }