LeetCode:2383.赢得比赛需要的最少训练时长

题目:

LeetCode:2383.赢得比赛需要的最少训练时长_第1张图片

LeetCode:2383.赢得比赛需要的最少训练时长_第2张图片

解题思路:

        由于最开始没有看清楚题目,所以处了精力这一部分,在经验方面想的办法是类似于操作系统死锁安全检测,银行家算法来尝试解决。

        后来发现是按照顺序一个一个进行比赛,所以精力这一部分不发生改变,而经验只需要进行遍历模拟即可。

        精力:由于精力是不断减小,所以只需要将需要的总精力值算出,如果比initialEnergy大,则表示需要在精力方面进行训练,时间为m-initialenergy+1

        经验:一个一个比,大于加上去,训练时间不变,小于则先加训练时长,为差值+1,在将原本经验更新

代码:

class Solution:
    def minNumberOfHours(self, initialEnergy: int, initialExperience: int, energy: List[int], experience: List[int]) -> int:
        ans = 0
        m = sum(energy)
        if initialEnergy <= m :
            ans += m + 1 - initialEnergy

        for i in experience:
            if initialExperience <= i:
                ans += 1 + (i - initialExperience)
                initialExperience = 2 * i + 1
            else:
                initialExperience += i
        return ans

你可能感兴趣的:(leetcode)