【week307-amazon】leetcode2383/6152.赢得比赛需要的最少训练时长

461 篇文章 1 订阅

题目:
你正在参加一场比赛,给你两个 正 整数 initialEnergy 和 initialExperience 分别表示你的初始精力和初始经验。

另给你两个下标从 0 开始的整数数组 energy 和 experience,长度均为 n 。

你将会 依次 对上 n 个对手。第 i 个对手的精力和经验分别用 energy[i] 和 experience[i] 表示。当你对上对手时,需要在经验和精力上都 严格 超过对手才能击败他们,然后在可能的情况下继续对上下一个对手。

击败第 i 个对手会使你的经验 增加 experience[i],但会将你的精力 减少 energy[i] 。

在开始比赛前,你可以训练几个小时。每训练一个小时,你可以选择将增加经验增加 1 或者 将精力增加 1 。

返回击败全部 n 个对手需要训练的 最少 小时数目。

在这里插入图片描述
在这里插入图片描述

思路:
分别对经历值和经验值进行迭代判断,计算需要训练的时间。

解答:

方法一:

class Solution:
    def minNumberOfHours(self, initialEnergy: int, initialExperience: int, energy: List[int], experience: List[int]) -> int:
        ip=initialExperience
        ie=initialEnergy
        n=len(energy)
        #先判断经验
        addep=0
        for i in range(n):
            if ip>experience[i]:
                ip+=experience[i]
            else:
                addep+=(experience[i]+1-ip)
                ip = experience[i]*2+1
        #再判断经历
        addeg=0
        for i in range(n):
            if ie>energy[i]:
                ie-=energy[i]
            else:
                addeg+=energy[i]+1-ie
                ie=1
        #print(addeg,addep)
        return addeg+addep

方法二:

class Solution:
    def minNumberOfHours(self, initialEnergy: int, initialExperience: int, energy: List[int], experience: List[int]) -> int:
        ans=0
        eng=initialEnergy
        exp=initialExperience
        #print(*zip(energy,experience))
        for x,y in zip(energy,experience):
            if eng<=x:
                ans+=x+1-eng
                eng=x+1
            eng-=x
            
            if exp<=y:
                ans+=y+1-exp
                exp=y+1
            exp+=y
        return ans
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值