题解 | #牛群的最大能量环#
牛群的最大能量环
https://www.nowcoder.com/practice/653d5a6041a04b8cb9b082eeb1429d1c
key:
- 既然是环,那就手动补成一个环
- 注意“补丁1”:当r不能移动时,如何移动l有两种情况:l != r、 l < r
class Solution:
def maxEnergyCircular(self , energy: List[int]) -> int:
lenth = len(energy)
if lenth == 1:
return energy[0]
energy = energy + energy[:-1]
result = energy[0]
l, r = 0, 0
tmp = energy[0]
while r < len(energy):
if r - l + 1 == lenth:
tmp -= energy[l]
l += 1
result = max(result, tmp)
continue
if r < len(energy) - 1 and tmp + energy[r + 1] >= 0:
r += 1
tmp += energy[r]
result = max(result, tmp)
else:
if l < r:
while l < r:
tmp -= energy[l]
l += 1
result = max(result, tmp)
# 补丁1:当r不能移动时,如何移动l有两种情况:l != r时, l < r时。
else:
r += 1
l += 1
tmp = energy[r]
result = max(result, tmp)
if l == len(energy) - 1 and r == len(energy) - 1:
return result
