文巾解题 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?

 

1 题目描述

2 解题思路

我们把所有类型的糖果按照所属类型从小到大排成一队,每天就从前向后依次拿糖果。

那么对于query中的第i个元素[favoriteType_i, favoriteDay_i, dailyCap_i],我们最少已经吃了1*(favoriteDay_i +1)颗糖(因为我们是从第0天开始吃的),最多吃了dailyCap_i*(favoriteDay_i +1)颗糖。所以只要在这个区间内,有favoriteType_i这个类型的糖,那么就满足 条件。

favoriteType_i这个类型的糖的下标满足什么条件呢?应该是前一种糖都吃完了,自己吃到最后一颗糖的时候,也就是:

所以只要这两个区间有交集,那么这个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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值