3354. 使陣列元素等於零

xiaoxinlong發表於2024-11-19

給你一個整數陣列 nums

開始時,選擇一個滿足 nums[curr] == 0 的起始位置 curr ,並選擇一個移動 方向 :向左或者向右。

此後,你需要重複下面的過程:

  • 如果 curr 超過範圍 [0, n - 1] ,過程結束。
  • 如果 nums[curr] == 0 ,沿當前方向繼續移動:如果向右移,則 遞增 curr ;如果向左移,則 遞減 curr
  • 如果 nums[curr] > 0:
    • nums[curr] 減 1 。
    • 反轉 移動方向(向左變向右,反之亦然)。
    • 沿新方向移動一步。

如果在結束整個過程後,nums 中的所有元素都變為 0 ,則認為選出的初始位置和移動方向 有效 。

返回可能的有效選擇方案數目。

class Solution:
    def countValidSelections(self, nums: List[int]) -> int:
        left_sum = [0 for _ in nums]
        right_sum = [0 for _ in nums]

        left_sum[0] = 0
        right_sum[0] = 0

        for i,n in enumerate(nums):
            if i>0:
                left_sum[i] = left_sum[i-1] + nums[i-1]
        for i,n in enumerate(nums[::-1]):
            if i>0:
                right_sum[i] = right_sum[i-1] + nums[::-1][i-1]
        right_sum = right_sum[::-1]
        # print(left_sum)
        # print(right_sum)
        ans = 0
        for i,n in enumerate(nums):
            # print(i,n)
            if n==0 and left_sum[i]==right_sum[i]:
                ans +=  2
            elif n==0 and abs(left_sum[i]-right_sum[i])==1:
                ans += 1
        return ans

相關文章