在Python中将数组划分为三个相等的部分

假设我们有一个整数数组A,当且仅当我们可以将该数组划分为三个总和相等的非空部分时,输出才为true。

形式上,如果我们可以找到索引i + 1 <j,则可以对数组进行分区,其中(A [0] + A [1] + ... + A [i]与A [i + 1] + A [ i + 2] + ... + A [j-1]和A [j] + A [j-1] + ... + A [A.length-1])

因此,如果输入为[0,2,1,-6,6,-7,9,1,2,0,1],则输出为true。三个数组将是[0,2,1],[-6,6,-7,9,1]和[2,0,1]

为了解决这个问题,我们将遵循以下步骤-

  • temp:=所有元素的总和,required_sum:= temp / 3

  • 设置sum_left来存储从左到右的累计和

  • 设置sum_right来存储从右到左的累计和

  • index1:= 0和index2:=数组长度– 1

  • 而index1 <index2:

    • index2:= index2 – 1

    • index1:= index1 + 1

    • 而index1 <index2和sum_left [index1]!= required_sum

    • 而index2> index1和sum_right [index2]!= required_sum

    • 如果index1 <index2并且index1!= index2,则返回true,否则返回false

    示例

    让我们看下面的实现以更好地理解-

    class Solution(object):
       def canThreePartsEqualSum(self, A):
          temp = sum(A)
          if (temp%3 != 0):
             return 0
          sum_left=[0 for i in range(len(A))]
          sum_left[0] = A[0]
          sum_right=[0 for i in range(len(A))]
          sum_right[-1] = A[-1]
          for i in range(1,len(A)):
             sum_left[i] = A[i]+sum_left[i-1]
          for i in range(len(A)-2,-1,-1):
             sum_right[i] = A[i]+sum_right[i+1]
          #print(sum_left,sum_right)
          required_sum = temp/3
          index1 = 0
          index2 = len(A)-1
          while index1 < index2:
          while index1 <index2 and sum_left[index1]!=required_sum:
             index1+=1
          while index2>index1 and sum_right[index2]!=required_sum:
             index2-=1
          return index1<index2 and index1 != index2
    ob1 = Solution()print(ob1.canThreePartsEqualSum([0,2,2,-6,6,-7,9,2,2,0,2]))

    输入值

    [0,2,1,-6,6,-7,9,1,2,0,1]

    输出结果

    true