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

闪念标签:LC

题目链接:https://leetcode.cn/problems/watering-plants-ii/