牛骨文教育服务平台(让学习变的简单)
博文笔记

分割数组

创建时间:2017-07-28 投稿人: 浏览次数:183

已知一个全是整数的数组,返回是否能将该数组分成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
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。