给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。
形式上,如果可以找出索引 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]) 就可以将数组三等分。
========================================
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/partition-array-into-three-parts-with-equal-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
========================================
解题思路:如果存在三部分使得满足题目要求,设d[i]表示列表的前i个值之和,队列的总和为num;则必定有一个d[i]=num/3,有一个d[j]=2*num/3,数组之和等于num,所以第三个数所在的位置不用考虑。
其python代码如下:
class Solution:
def canThreePartsEqualSum(self, A: List[int]) -> bool:
nums = sum(A)/3; # 每一部分的值是总和的1/3
k = 1 # 用于计算k*nums/3,找到每一部分的对应值
for i in range(len(A)): # 循环列表
if i == 0:
if A[i] == k*nums: # 判断是否为nums的倍数,如果是则k+1
k += 1
continue
A[i] += A[i-1] # 将前i个数进行求和
if(A[i]==k*nums): # 判断这前i个数之和是否是nums的倍数
k += 1
if k==3 and i!=len(A)-1: # 如果k==3 同时i不在列表的最后,则返回1
return True
return False