一文弄懂数组的和

一文弄懂数组的和,第1张

概述数组的和

方法一:双指针法,先要对数组进行排序

a=[12,6,8,1,4,3]def sum2(a,target):    res=[]    a=sorted(a)    l,r=0,len(a)-1    while l<r:        tmp=[0,0]        if a[l]+a[r]==target:            tmp[0]=a[l]            tmp[1]=a[r]            res.append(tmp)            l+=1            r-=1        elif a[l]+a[r]>target:            r-=1        else:            l+=1    return resprint(sum2(a,9))

输出:[[1,8],[3,6]]

方法二:对于第一种方法,主要时间都用在进行排序上,我们可以利用hash来避免进行排序。

{}    res=[]    for i in range(len(a)):        tmp=a[i]        if target-m  dic:            tmp[0]=m            tmp[1]=target-m            res.append(tmp)        dic[m]=i    if  target-a[i]  a[i+1:]:            tmp[0]=a[i]            tmp[1]=target-a[i]            res.append(tmp)     sum3(a,1)"> range(len(a)):        for j in range(i+1,len(a)):            tmp=if target-a[i]-a[j]  a[j+1:]:                tmp[0]=a[i]                tmp[1]=a[j]                tmp[2]=target-a[i]-a[j]                res.append(tmp)    return res
print(sum3(a,13))

输出:[[6,4]]

 sum4(a,len(a)):            for k in range(j+1if target-a[i]-a[j]-a[k] in a[k+1:]:                    tmp[0]=a[i]                    tmp[1]=a[j]                    tmp[2]=a[k]                    tmp[3]=target-a[i]-a[j]-a[k]                    res.append(tmp)    return res
print(sum4(a,24))

输出:[[12,3]]

扩展:数组中的和为n,但不限个数,同时也不能重复

a=[12,1)">]res=[] nor_sum(a,target,pos,end,tmp):    global res    if target<0:        return    if target==0:        res.append(tmp[:])     range(pos,end):        tmp.append(a[i])        nor_sum(a,target-a[i],i+1print(res)

输出:[[12],4]]

可以重复:(主要的区别如红色所标注的)

a=[12,target-a[i],i,[6,6],3,4],[4,3]]

 

总结

以上是内存溢出为你收集整理的一文弄懂数组的和全部内容,希望文章能够帮你解决一文弄懂数组的和所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1189966.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存