已知一个全是整数的数组,返回是否能将该数组分成4部分,每一部分累加和相等,分割之不算。
方法一:
设置一个黑盒,存放的是i下标坐标的和加“_”加右边的和
#coding=utf-8
def solution(nums):
if len(nums)<7:
return False
allSum=sum(nums)
d={}
leftSum=nums[0]
for i in range(1,len(nums)-1):
d[i]=str(leftSum)+"_"+str(allSum-nums[i]-leftSum)
leftSum+=nums[i]
print d
print d.values()
l=1
lsum=nums[0]
r=len(nums)-2
rsum=nums[-1]
while l<r-3:
if lsum==rsum:
if str(lsum*2+nums[l])+'_'+str(rsum*2+nums[r]) in d.values():
return True
elif lsum<rsum:
lsum+=nums[l]
l+=1
else:
rsum+=nums[r]
r-=1
return False
方法二:
因为全是正数,可以统计当前下标之前的数字和。然后遍历数组,先找第二个分割点,再找第三个。
def solution2(nums):
if len(nums)<7:
return False
d={}
s=nums[0]
for i in range(1,len(nums)):
d[s]=i
s+=nums[i]
lsum=nums[0]
for i in range(1,len(nums)-5):
checkSum=lsum*2+nums[i]
if checkSum in d.keys():
j=d[checkSum]
checkSum+=lsum+nums[j]
if checkSum in d.keys():
k=d[checkSum]
if checkSum+nums[k]+lsum==s:
return True
lsum+=nums[i]
return False