1 题目描述
2 解题思路
我们把所有类型的糖果按照所属类型从小到大排成一队,每天就从前向后依次拿糖果。
那么对于query中的第i个元素,我们最少已经吃了颗糖(因为我们是从第0天开始吃的),最多吃了颗糖。所以只要在这个区间内,有这个类型的糖,那么就满足 条件。
而这个类型的糖的下标满足什么条件呢?应该是前一种糖都吃完了,自己吃到最后一颗糖的时候,也就是:
所以只要这两个区间有交集,那么这个query就是True的,否则这个query就是False的
class Solution:
def canEat(self, candiesCount: List[int], queries: List[List[int]]) -> List[bool]:
type_sum=[candiesCount[0]]
for i in candiesCount[1:]:
type_sum.append(type_sum[-1]+i)
ret=[]
for i in queries:
favor_type=i[0]
favor_day=i[1]
daily_cap=i[2]
#吃糖区间
eat_min=favor_day+1
eat_max=(favor_day+1)*daily_cap
#这个类型的糖的区间(第一类要特判)
if(favor_type==0):
sugar_min=0
else:
sugar_min=type_sum[favor_type-1]+1
sugar_max=type_sum[favor_type]
if(eat_min>sugar_max or eat_max<sugar_min):
ret.append(False)
else:
ret.append(True)
return(ret)