Python-算法思维-4.1二分法1:查找平方和

第1关:二分查找算法

本关任务:编写一个实现二分算法的函数,能在一个已排序列表中快速搜索指定的数。

#二分查找
def binary_search(A, x):
    ########## begin ##########
    # 请在此填写代码,找到x返回索引号,没找到返回-1
    low,high=0,len(A)-1
    while high>=low:
        mid=(high+low)//2
        if A[mid]==x:
            return mid
        elif A[mid]>x:
            high=mid-1
        else:
            low=mid+1
    return -1
    ########## end ########## 
import random
random.seed(177) #随机数种子,使得A里面的数固定
#在1到百万的范围内,生成1万个数字
A=[random.randint(1,1000000) for i in range(10000)]
A.sort()
x=int(input())
index=binary_search(A, x)
print(index)

第2关:二分法查找平方和

本关任务:编写一个程序,用来在一个数字列表中搜索2个数a和b,使得a2+b2=x,其中x为一个给定的数。

平台生成一个包含1万个元素的列表(里面的元素每次运行时都一样),输入是一个数字x,要求函数在列表中找到2个数a,和b,使得a和b的平方和等于x,如果找到了,输出a和b(中间用空格隔开,要求a<=b,若有多对可能的a和b,输出其中a最小的一对),如果没有找到,返回-1。要求运行时间小于1秒。

# -*- coding: utf-8 -*-

import random,math
#二分查找
def binary_search(A, x):
    ########## begin ##########
    # 请在此填写代码,找到x返回索引号,没找到返回-1
    low,high=0,len(A)-1
    while high>=low:
        mid=(high+low)//2
        if A[mid]==x:
            return mid
        elif A[mid]>x:
            high=mid-1
        else:
            low=mid+1
    return -1
    ########## end ##########

random.seed(17) #随机数种子,使得A里面的数固定
#在1到1千的范围内,生成1万个数字
A=[random.randint(1,1000) for i in range(10000)]
A.sort() #排序
X=int(input())
founded=False
for i, a in enumerate(A[:-1]):#遍历前n-1个数
    ########## begin ##########
    # 请在此填写代码,输出找到的a和b,没找到返回-1
    if  X-a**2>=0:
        b=math.sqrt(X-a**2)
        idx=binary_search(A[i+1:], b)
        if idx!=-1:
            founded=True
            print(a,A[i+1+idx])
            break
    ########## end ##########
if not founded:print('-1')

求求三连。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值