Leetcode Link: 6152. 赢得比赛需要的最少训练时长 - 力扣(LeetCode)
题目

解法一
个人思路
-
求所需的精力 这个好求,我们只需要保证我们的初始精力比所有总需要的精力大 1 即可。
need_energy = sum(energy) - initialEnergy + 1卡了半个小时的错误
sum(energy) - initialEnergy和 0 的关系,不然会出现负数,我尼玛卡了半个多小时。你需要先判断
-
求所需经验 因为经验是累加的,因此不能像求精力那样直接从和入手。 经验需要逐位累加,逐位考虑,每次累加到对应的位置,一旦小于目标经验,则需要训练对应的时间。
题解:
class Solution:
def minNumberOfHours(self, initialEnergy: int, initialExperience: int, energy: List[int], experience: List[int]) -> int:
# 所需精力
need_energy = max(sum(energy)-initialEnergy+1, 0)
# 所需经验
actual_exp = [0] * len(experience)
actual_exp[0] = initialExperience
need_exp = 0
for i in range(len(experience)-1):
# 当实际经验小于等于所需经验的时候
# 需要锻炼对应的时间,把实际经验顶到所需经验+1的位置
if actual_exp[i] <= experience[i]:
need_exp += experience[i] - actual_exp[i] + 1
actual_exp[i] = experience[i] + 1
actual_exp[i+1] = actual_exp[i] + experience[i]
# 最后一个关卡的经验没有被判断,这里补上
if actual_exp[-1] <= experience[-1]:
need_exp += experience[-1] - actual_exp[-1] + 1
return need_exp + need_energy解法二
思路:
题解:
启发和联系
错误分析
忘记判断变量的正负性,导致输出可能为负数。