在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