leetcode每日一题
[1738] 找出第 K 大的异或坐标值
[1744] 你能在你最喜欢的那天吃到你最喜欢的糖果吗?
[231] 2的幂
堆排复习
[461] 汉明距离
[1190] 反转每对括号间的子串
[1707] 与数组中元素的最大异或值
[810] 黑板异或游戏
[1035] 不相交的线
[692] 前K个高频单词
[872] 叶子相似的树
[1442] 形成两个异或相等数组的三元组数目
[993] 二叉树的堂兄弟节点
[421] 数组中两个数的最大异或值
[13] 罗马数字转整数
[12] 整数转罗马数字
[1269]. 停在原地的方案数
[1310] 子数组异或查询
[1734] 解码异或后的排列
本文档使用 MrDoc 发布
-
+
首页
[1744] 你能在你最喜欢的那天吃到你最喜欢的糖果吗?
## [1744] 你能在你最喜欢的那天吃到你最喜欢的糖果吗? [力扣原题连接](https://leetcode-cn.com/problems/can-you-eat-your-favorite-candy-on-your-favorite-day/) 给你一个下标从 **0** 开始的正整数数组 `candiesCount` ,其中 `candiesCount[i]` 表示你拥有的第 `i` 类糖果的数目。同时给你一个二维数组 `queries` ,其中 `queries[i] = [favoriteType<sub>i</sub>, favoriteDay<sub>i</sub>, dailyCap<sub>i</sub>]` 。 你按照如下规则进行一场游戏: * 你从第 `<strong>0</strong>`** ** 天开始吃糖果。 * 你在吃完 **所有** 第 `i - 1` 类糖果之前,**不能** 吃任何一颗第 `i` 类糖果。 * 在吃完所有糖果之前,你必须每天 **至少** 吃 **一颗** 糖果。 请你构建一个布尔型数组 `answer` ,满足 `answer.length == queries.length` 。`answer[i]` 为 `true` 的条件是:在每天吃 **不超过** `dailyCap<sub>i</sub>`~ ~ 颗糖果的前提下,你可以在第 `favoriteDay<sub>i</sub>` 天吃到第 `favoriteType<sub>i</sub>` 类糖果;否则 `answer[i]` 为 `false` 。注意,只要满足上面 3 条规则中的第二条规则,你就可以在同一天吃不同类型的糖果。 请你返回得到的数组* * `answer` 。 **示例 1:** <pre><b>输入:</b>candiesCount = [7,4,5,3,8], queries = [[0,2,2],[4,2,4],[2,13,1000000000]] <b>输出:</b>[true,false,true] <strong>提示:</strong> 1- 在第 0 天吃 2 颗糖果(类型 0),第 1 天吃 2 颗糖果(类型 0),第 2 天你可以吃到类型 0 的糖果。 2- 每天你最多吃 4 颗糖果。即使第 0 天吃 4 颗糖果(类型 0),第 1 天吃 4 颗糖果(类型 0 和类型 1),你也没办法在第 2 天吃到类型 4 的糖果。换言之,你没法在每天吃 4 颗糖果的限制下在第 2 天吃到第 4 类糖果。 3- 如果你每天吃 1 颗糖果,你可以在第 13 天吃到类型 2 的糖果。 </pre> **示例 2:** <pre><b>输入:</b>candiesCount = [5,2,6,4,1], queries = [[3,1,2],[4,10,3],[3,10,100],[4,100,30],[1,3,1]] <b>输出:</b>[false,true,true,false,false] </pre> **提示:** * `1 <= candiesCount.length <= 10<sup>5</sup>` * `1 <= candiesCount[i] <= 10<sup>5</sup>` * `1 <= queries.length <= 10<sup>5</sup>` * `queries[i].length == 3` * `0 <= favoriteType<sub>i</sub><span> </span>< candiesCount.length` * `0 <= favoriteDay<sub>i</sub><span> </span><= 10<sup>9</sup>` * `1 <= dailyCap<sub>i</sub><span> </span><= 10<sup>9</sup>` ### 思路 判断一下 前i种糖果每天吃一颗的情况和每天吃最大限制的情况能否满足就可以了。要注意边界问题,题意是从第0天开始吃。 ### 代码 ```cpp class Solution { public: vector<bool> canEat(vector<int> &candiesCount, vector<vector<int>> &queries) { vector<bool> resurt; int len = (int)queries.size(); resurt.resize(len); std::vector<long> sum; sum.clear(); int cand_len = (int)candiesCount.size(); sum.resize(cand_len); sum[0] = (long)candiesCount[0]; for (int i = 1; i < (int)candiesCount.size(); ++i) { sum[i] = sum[i - 1] + (long)candiesCount[i]; } for (int i = 0; i < len; ++i) { long other_num = sum[queries[i][0]] - candiesCount[queries[i][0]]; //前i种糖果的总数 long eat_num = candiesCount[queries[i][0]]; //想吃的糖果的数量 bool tmp = true; if (other_num + eat_num <= queries[i][1]) tmp = false; //每天都吃1颗 没到想吃那天就吃完了 if ((long)(queries[i][1] + 1) * queries[i][2] <= other_num) tmp = false; //每天都吃最大限制 也吃不到 resurt[i] = tmp; } return resurt; } }; ```
ty
2021年6月1日 12:46
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
阅读量
次
本站总访问量
次
本站访客数
人次
Markdown文件
分享
链接
类型
密码
更新密码