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


image-20210601105744311

题解

  • 今天的题目看起来啰嗦,实际上就是判断两种极限情况
  1. 一天只吃1颗,但是在favoriteDay之前(favoriteDay-1)就已经把favoriteType类型的糖吃完了
  2. 一天吃dailyCap颗,但是在第favoriteDay还没有吃完favoriteType类型之前的糖
  • 用前缀和来计算favoriteType之前的糖果数目
  • 陷阱之一是day从0开始
  • 陷阱之二是使用int类型会溢出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public boolean[] canEat(int[] candiesCount, int[][] queries) {
boolean[] result = new boolean[queries.length];
long[] pre = new long[candiesCount.length];
pre[0] = candiesCount[0];
for(int i=1;i<candiesCount.length;i++){
pre[i] = pre[i-1]+candiesCount[i];
}
for(int i=0;i<queries.length;i++){
result[i] = judge(queries[i],candiesCount,pre);
}
return result;
}

public boolean judge(int[] cod,int[] array,long[] pre){
int type = cod[0];
long day = cod[1];
long cap = cod[2];
if(day>=pre[type]){
return false;
}
if(cap*(day+1)<=((type==0)?0:pre[type-1])){
return false;
}
return true;
}
}

image-20210601105848584


← Prev P523 连续的子数组和 | P3 无重复字符的最长子串 Next →