二分查找-python

约12年年底的时候,接触了python不到半年的样子,入门是直接实现GUI测试case的。今天面试地平线机器人,发现忘得差不多了- -。

当时的问题是这样的 写一个二分查找是实现,我好像不记得二分查找是个啥- -面试官很nice的解释了一遍。当时的写法是这样的。

#!/bin/usr/env python

inputArr=[1,2,3,4,4,5,5,5,6,6,6,7,77,77]

destStr=sys.argv[1]

if inputArr.find(destStr) == -1:

print "the string you find is not in "

else

indexLefr=inputArr.find(destStr)

indexRight=inputArr.index(destStr)

print "width is from"+str(indexLefr)+"to"+str(indexRight)

思路是这样的,如果先从左边查找元素,如果返回-1,表示不存在。否则就分别从左边和右边查找。问题的关键在于既能从左边查找,也能从右边查找,是字符串而不是list。而且写错了#!/bin/usr/env python,应该写错#!/usr/bin/env python。Left拼错了… 然后二分查找应该是对一个排序好的数组(列表),查找给出元素的索引区间,因为是排序好的,所以自然是二分查找效率更好。

对方提示了是用index和count,试了一下

#!/usr/bin/env python

numbers = [1,2,3,4,4,5,5,5,6,6,6,7,77,77]

for number in numbers:

print 'currentValue:'+str(number)+'\t beginIndex:'+str(numbers.index(number))+'\t endIndex:'+str(numbers.index(number)+numbers.count(number)-

1)

输出:

[root@Grace ~]# ./findIndex.py

currentValue:1 beginIndex:0 endIndex:0

currentValue:2 beginIndex:1 endIndex:1

currentValue:3 beginIndex:2 endIndex:2

currentValue:4 beginIndex:3 endIndex:4

currentValue:4 beginIndex:3 endIndex:4

currentValue:5 beginIndex:5 endIndex:7

currentValue:5 beginIndex:5 endIndex:7

currentValue:5 beginIndex:5 endIndex:7

currentValue:6 beginIndex:8 endIndex:10

currentValue:6 beginIndex:8 endIndex:10

currentValue:6 beginIndex:8 endIndex:10

currentValue:7 beginIndex:11 endIndex:11

currentValue:77 beginIndex:12 endIndex:13

currentValue:77 beginIndex:12 endIndex:13

然而发现一个低级错误的问题:只要一把currentValue改成Value,输出就变成了这样,把value换成其他词就好了,估计是那只模块函数或者关键字啥的。

[root@Grace ~]# ./findIndex.py  
Value:1  beginIndex:0    endIndex:0
Value:2  beginIndex:1    endIndex:1
Value:3  beginIndex:2    endIndex:2
Value:4  beginIndex:3    endIndex:4
Value:4  beginIndex:3    endIndex:4
Value:5  beginIndex:5    endIndex:7
Value:5  beginIndex:5    endIndex:7
Value:5  beginIndex:5    endIndex:7
Value:6  beginIndex:8    endIndex:10
Value:6  beginIndex:8    endIndex:10
Value:6  beginIndex:8    endIndex:10
Value:7  beginIndex:11   endIndex:11
Value:77         beginIndex:12   endIndex:13
Value:77         beginIndex:12   endIndex:13

此外二分查找也不应该这样写,至少得有个/2的分半,是我选用了库函数丰富的python简化了很多吧

http://www.weixueyuan.net/view/5945.html

http://blog.csdn.net/antineutrino/article/details/6763565/

http://blog.sina.com.cn/s/blog_47d5f1b801016kx7.html

转载于:https://www.cnblogs.com/gracejiang/p/6118536.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值