JZX轻语:简
LeetCode 2105 - 给植物浇水II
发表于2024年05月09日
给植物浇水I的双指针扩展,同样也是模拟的方式,一个从左到右,另一个从右往左,直至两者相遇。需要处理的特殊情况是两者最后刚好落在同一个地方,此时只要双方其一有足够的水即可,否则需要结果+1
。
class Solution:
def minimumRefill(self, plants: List[int], capacityA: int, capacityB: int) -> int:
cur_cap_a, cur_cap_b = capacityA, capacityB
a, b = 0, len(plants) - 1
ans = 0
while a < b:
if cur_cap_a < plants[a]:
ans += 1
cur_cap_a = capacityA - plants[a]
else:
cur_cap_a -= plants[a]
if cur_cap_b < plants[b]:
ans += 1
cur_cap_b = capacityB - plants[b]
else:
cur_cap_b -= plants[b]
a += 1
b -= 1
# 双方落在同一个植物上的处理: 谁有水就谁浇, 否则任一补充即可
# max(plants[i]) <= capacityA, capacityB <= 10⁹
if a == b and cur_cap_a < plants[a] and cur_cap_b < plants[b]:
ans += 1
return ans