Python爬虫踩坑之二分查找,数值按位相加,

由于比较紧张,题当时没写完,昨天重新写了下
二分查找:

二分查找又称折半查找,其核心就是在有序的表中,取中表的中间值和目标值来匹配,
中间值比目标值大,则继续左子表中二分,反之同理。一直查到目标值与匹配值相等,
否则不存在。

题目:在数字列表中随机两个数使之等于给定值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)

简单实现下写的繁琐勿见怪

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值