1744:你能在你最喜欢的那天吃到你最喜欢的糖果吗?

This commit is contained in:
huangge1199 2021-06-01 13:21:53 +08:00
parent a0ba3cdecf
commit 388482234b
4 changed files with 176 additions and 1 deletions

View File

@ -0,0 +1,94 @@
//给你一个下标从 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
//
//
//
// 示例 1
//
//
//输入candiesCount = [7,4,5,3,8], queries = [[0,2,2],[4,2,4],[2,13,1000000000]]
//输出[true,false,true]
//提示
//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 的糖果
//
//
// 示例 2
//
//
//输入candiesCount = [5,2,6,4,1], queries = [[3,1,2],[4,10,3],[3,10,100],[4,100,3
//0],[1,3,1]]
//输出[false,true,true,false,false]
//
//
//
//
// 提示
//
//
// 1 <= candiesCount.length <= 105
// 1 <= candiesCount[i] <= 105
// 1 <= queries.length <= 105
// queries[i].length == 3
// 0 <= favoriteTypei < candiesCount.length
// 0 <= favoriteDayi <= 109
// 1 <= dailyCapi <= 109
//
// Related Topics 数学
// 👍 53 👎 0
package leetcode.editor.cn;
//1744:你能在你最喜欢的那天吃到你最喜欢的糖果吗
public class CanYouEatYourFavoriteCandyOnYourFavoriteDay {
public static void main(String[] args) {
//测试代码
Solution solution = new CanYouEatYourFavoriteCandyOnYourFavoriteDay().new Solution();
solution.canEat(new int[]{5, 2, 6, 4, 1}, new int[][]{{4, 100, 30}, {1, 3, 1}});
}
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean[] canEat(int[] candiesCount, int[][] queries) {
long[] sum = new long[candiesCount.length];
int flag = 0;
sum[0] = candiesCount[0];
boolean[] result = new boolean[queries.length];
for (int i = 0; i < queries.length; i++) {
int index = queries[i][0];
if (index > flag) {
for (int j = flag + 1; j <= index; j++) {
sum[j] = sum[j - 1] + candiesCount[j];
}
flag = index;
}
if (index > 0) {
result[i] = sum[index - 1] / queries[i][2] <= queries[i][1];
result[i] = result[i] && sum[index] >= queries[i][1] + 1;
} else {
result[i] = sum[index] >= queries[i][1] + 1;
}
}
return result;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}

View File

@ -0,0 +1,48 @@
<p>给你一个下标从 <strong>0</strong> 开始的正整数数组 <code>candiesCount</code> ,其中 <code>candiesCount[i]</code> 表示你拥有的第 <code>i</code> 类糖果的数目。同时给你一个二维数组 <code>queries</code> ,其中 <code>queries[i] = [favoriteType<sub>i</sub>, favoriteDay<sub>i</sub>, dailyCap<sub>i</sub>]</code> 。</p>
<p>你按照如下规则进行一场游戏:</p>
<ul>
<li>你从第 <code><strong>0</strong></code><strong> </strong>天开始吃糖果。</li>
<li>你在吃完 <strong>所有</strong> 第 <code>i - 1</code> 类糖果之前,<strong>不能</strong> 吃任何一颗第 <code>i</code> 类糖果。</li>
<li>在吃完所有糖果之前,你必须每天 <strong>至少</strong> 吃 <strong>一颗</strong> 糖果。</li>
</ul>
<p>请你构建一个布尔型数组 <code>answer</code> ,满足 <code>answer.length == queries.length</code><code>answer[i]</code> 为 <code>true</code> 的条件是:在每天吃 <strong>不超过</strong> <code>dailyCap<sub>i</sub></code><sub> </sub>颗糖果的前提下,你可以在第 <code>favoriteDay<sub>i</sub></code> 天吃到第 <code>favoriteType<sub>i</sub></code> 类糖果;否则 <code>answer[i]</code> 为 <code>false</code> 。注意,只要满足上面 3 条规则中的第二条规则,你就可以在同一天吃不同类型的糖果。</p>
<p>请你返回得到的数组<em> </em><code>answer</code> 。</p>
<p> </p>
<p><strong>示例 1</strong></p>
<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>
<p><strong>示例 2</strong></p>
<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>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= candiesCount.length <= 10<sup>5</sup></code></li>
<li><code>1 <= candiesCount[i] <= 10<sup>5</sup></code></li>
<li><code>1 <= queries.length <= 10<sup>5</sup></code></li>
<li><code>queries[i].length == 3</code></li>
<li><code>0 <= favoriteType<sub>i</sub> < candiesCount.length</code></li>
<li><code>0 <= favoriteDay<sub>i</sub> <= 10<sup>9</sup></code></li>
<li><code>1 <= dailyCap<sub>i</sub> <= 10<sup>9</sup></code></li>
</ul>
<div><div>Related Topics</div><div><li>数学</li></div></div>\n<div><li>👍 49</li><li>👎 0</li></div>

View File

@ -0,0 +1,33 @@
<p>给你一个整数数组 <code>nums</code> 和一个正整数 <code>k</code> ,返回长度为 <code>k</code> 且最具 <strong>竞争力</strong><em> </em><code>nums</code> 子序列。</p>
<p>数组的子序列是从数组中删除一些元素(可能不删除元素)得到的序列。</p>
<p>在子序列 <code>a</code> 和子序列 <code>b</code> 第一个不相同的位置上,如果 <code>a</code> 中的数字小于 <code>b</code> 中对应的数字,那么我们称子序列 <code>a</code> 比子序列 <code>b</code>(相同长度下)更具 <strong>竞争力</strong> 。 例如,<code>[1,3,4]</code><code>[1,3,5]</code> 更具竞争力,在第一个不相同的位置,也就是最后一个位置上, <code>4</code> 小于 <code>5</code></p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [3,5,2,6], k = 2
<strong>输出:</strong>[2,6]
<strong>解释:</strong>在所有可能的子序列集合 {[3,5], [3,2], [3,6], [5,2], [5,6], [2,6]} 中,[2,6] 最具竞争力。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [2,4,3,3,5,4,9,6], k = 4
<strong>输出:</strong>[2,3,3,4]
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= nums.length <= 10<sup>5</sup></code></li>
<li><code>0 <= nums[i] <= 10<sup>9</sup></code></li>
<li><code>1 <= k <= nums.length</code></li>
</ul>
<div><div>Related Topics</div><div><li></li><li></li><li>贪心算法</li><li>队列</li></div></div>\n<div><li>👍 58</li><li>👎 0</li></div>

File diff suppressed because one or more lines are too long