一文弄懂数组的和
时间:2022-07-23
本文章向大家介绍一文弄懂数组的和,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
方法一:双指针法,先要对数组进行排序
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 res
print(sum2(a,9))
输出:[[1, 8], [3, 6]]
方法二:对于第一种方法,主要时间都用在进行排序上,我们可以利用hash来避免进行排序。
def sum2(a,target):
dic={}
res=[]
for i in range(len(a)):
tmp=[0,0]
m=a[i]
if target-m in dic:
tmp[0]=m
tmp[1]=target-m
res.append(tmp)
dic[m]=i
return res
print(sum2(a,10))
输出:[[1, 8], [3, 6]]
方法三:免去建立hash表
def sum2(a,target):
res=[]
for i in range(len(a)):
tmp=[0,0]
if target-a[i] in a[i+1:]:
tmp[0]=a[i]
tmp[1]=target-a[i]
res.append(tmp)
return res
print(sum2(a,9))
输出:[[6, 3], [8, 1]]
扩展:方法三可以扩展到三个数的和、四个数的和等;
def sum3(a,target):
res=[]
for i in range(len(a)):
for j in range(i+1,len(a)):
tmp=[0,0,0]
if target-a[i]-a[j] in a[j+1:]:
tmp[0]=a[i]
tmp[1]=a[j]
tmp[2]=target-a[i]-a[j]
res.append(tmp)
return res
输出:[[6, 4, 3], [8, 1, 4]]
def sum4(a,target):
res=[]
for i in range(len(a)):
for j in range(i+1,len(a)):
for k in range(j+1,len(a)):
tmp=[0,0,0,0]
if 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
输出:[[12, 8, 1, 3]]
扩展:数组中的和为n,但不限个数,同时也不能重复
a=[12,6,8,1,4,3]
res=[]
def nor_sum(a,target,pos,end,tmp):
global res
if target<0:
return
if target==0:
res.append(tmp[:])
for i in range(pos,end):
tmp.append(a[i])
nor_sum(a,target-a[i],i+1,end,tmp)
tmp.pop()
nor_sum(a,12,0,len(a),[])
print(res)
输出:[[12], [8, 1, 3], [8, 4]]
可以重复:(主要的区别如红色所标注的)
a=[12,6,8,4,3]
res=[]
def nor_sum(a,target,pos,end,tmp):
global res
if target<0:
return
if target==0:
res.append(tmp[:])
for i in range(pos,end):
tmp.append(a[i])
nor_sum(a,target-a[i],i,end,tmp)
tmp.pop()
nor_sum(a,12,0,len(a),[])
print(res)
输出:[[12], [6, 6], [6, 3, 3], [8, 4], [4, 4, 4], [3, 3, 3, 3]]
- 《微信小程序七日谈》- 第六天:小程序devtool隐藏的秘密
- boi剖析 - 基于webpack的css sprites实现方案
- 深入JDK源码之ThreadLocal类
- 独家 | 一文读懂TensorFlow基础
- Webpack中hash与chunkhash的区别,以及js与css的hash指纹解耦方案
- RPC原理及实现
- RMI原理及实现
- webpack多页面开发与懒加载hash解决方案
- 前后端分离和模块化-58到家微信首页重构之路
- Node.js建站笔记-使用react和react-router取代Backbone
- 协同过滤推荐算法Java代码实现
- Nginx模块之Filter解析
- Nodejs建站笔记-注册登录流程的简单实现
- 前端工程化-构建
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CSS中重要的BFC概念
- Redis哨兵集群中哨兵挂了,主从库还能切换吗?
- 你的 Redis 为什么变慢了?
- 解决Maven依赖冲突的好帮手,这款IDEA插件了解一下?
- Python爬虫实现HTTP网络请求多种实现方式
- 在tensorflow以及keras安装目录查询操作(windows下)
- Python调用OpenCV实现图像平滑代码实例
- php微信公众号开发之音乐信息
- Laravel关联模型中过滤结果为空的结果集(has和with区别)
- php微信公众号开发之二级菜单
- django中的ajax组件教程详解
- php微信公众号开发之校园图书馆
- 查看keras的默认backend实现方式
- Python包和模块的分发详细介绍
- PHP cookie,session的使用与用户自动登录功能实现方法分析