判断数值是否在数列中的方法

问题:已知数值5,查找数值3是否在数列A=[5.8.10.13]中。

 

讨论此问题,有基本的两种解法,第一种是:线性查找,即直接比较数值是否在数列中,其算法如下:

#利用线性查找的方法查找List中的值

def search(ist,x):

    for i in range(len(ist)):

        if ist[1] == x:

            return i

           

        return -1


ist = [5,8,10,13]

print search(ist,5)

#显示List的下标

 

上面是第一种解法,不难看出其最坏的运行时间为:K0n+k1,所以算出其时间复杂度为On.

 

#利用两分查找法查找list中的值

def bi_search(lst, x):

low = 0

high = len(lst) - 1

while low <= high:

mid = (low + high)/2

if lst[mid] == x:

return mid

elif ist[mid] > 1:

high = mid -1

else:

low = mid + 1

return -1

ist = [5,8,10,13]


print bi_search(ist,5)

#显示list的下标

 

其时间复杂为:Olog2n


_____________最后的话,作为某三线互联网公司HR,此题目是我们考察候选人的第一道笔试题,但是在实际过程中,我们发现很多候选人的算法能力都非常薄弱,在这道题的解法上,只能用线性查找来实现该算法——

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值