由于比较紧张,题当时没写完,昨天重新写了下
二分查找:
二分查找又称折半查找,其核心就是在有序的表中,取中表的中间值和目标值来匹配,
中间值比目标值大,则继续左子表中二分,反之同理。一直查到目标值与匹配值相等,
否则不存在。
题目:在数字列表中随机两个数使之等于给定值k
前提:
l=[2,5,6,7,3,4,11,3,45,222,34]
l.sort()
k=36
答1:最简单的
res=[]
for i in l:
y=k-i
if y in l:
res.append((i,y))
else:
pass
print(res)
二分:(只是用一下别在意为什么用)
def num(l,n):
index=int(len(l)//2)
#l列表里要两个值如果len(l)=1:这时候程序会在递归中报错,故只有一个值的时候单独判断
if len(l)>1:
if l[index]>n:
return num(l[:index],n)
elif l[index]<n:
return num(l[index:],n)
else:
return l[index]
else:
if l[0]==n:
return n
return
#取中值,取索引差不多
if __name__=="__main__":
res = []
for i in l:
if k>=i:
y = k-i
ress=num(l,y)
if ress:
res.append(ress)
print(res)
还有一个题了就是给定两个字符串类型的数字,按位数相加
num1="14"
num2="277"
#先判断长度,为不足位数的位置补充零,也可以不判断,长度长的数只需要在短数的位数基础上看大于短的那一部分上是否要加即可(报错既结束程序)
if len(num1)>len(num2):
num=num1
else:
num=num2
sum=[0]*len(num)
# 最好遍历短的这样从程序上来会快一些,从各位开始
for i in range(-1,-len(num)-1,-1):
#补充0,字符串不可改
if len(num1) <abs(i):num1="0"+num1
elif len(num2)<abs(i):num2="0"+num2
#同一位上的数相加大于9,总数-10,后一位加1
if int(num1[i])+int(num2[i])>9:
sum[i]+=(int(num1[i])+int(num2[i])-10)
sum[i-1]=sum[i-1]+1
else:
sum[i] +=(int(num1[i]) + int(num2[i]))
sum=[str(i) for i in sum]
sun="".join(sum)
print(sun)
简单实现下写的繁琐勿见怪