分割数组

已知一个全是整数的数组,返回是否能将该数组分成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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值