二分查找-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: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
二分查找-python的更多相关文章
- 二分查找——Python实现
一.排序思想 二分(折半)查找思想请参见:https://www.cnblogs.com/luomeng/p/10585291.html 二.python实现 def binarySearchDemo ...
- 线性查找与二分查找(python)
# -*- coding: utf-8 -*- number_list = [0, 1, 2, 3, 4, 5, 6, 7] def linear_search(value, iterable): f ...
- 二分查找 python实现
欢迎回来 [^first blood]. 要求A是升序数组 递归 只能查 数据存不存在,不能返回下标 def binary_find(A, m): if len(A) == 0: return -1 ...
- 算法:二分查找(python版)
#!/usr/bin/env python #coding -*- utf:8 -*- #二分查找#时间复杂度O(logn)#一个时间常量O(1)将问题的规模缩小一半,则O(logn) import ...
- python算法之二分查找
说明:大部分代码是在网上找到的,好几个代码思路总结出来的 通常写算法,习惯用C语言写,显得思路清晰.可是假设一旦把思路确定下来,并且又不想打草稿.想高速写下来看看效果,还是python写的比較快.也看 ...
- python函数(4):递归函数及二分查找算法
人理解循环,神理解递归! 一.递归的定义 def story(): s = """ 从前有个山,山里有座庙,庙里老和尚讲故事, 讲的什么呢? ""& ...
- python实现二分查找算法
二分查找算法也成为折半算法,对数搜索算法,一会中在有序数组中查找特定一个元素的搜索算法.搜索过程是从数组中间元素开始的 如果中间元素正好是要查找的元素,则搜索过程结束:如果查找的数大于中间数,则在数组 ...
- Python实现二分查找
老生常谈的算法了. #!/usr/bin/python # -*- coding:utf-8 -*- # Filename: demo.py # 用python实现二分查找 def binarySea ...
- python关于二分查找
楔子 如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72 ...
随机推荐
- MyBatis与Hibernate的比较
Hibernate 与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹些,支持的工具也多,更新也快,当前最高版本4.1.8.而Mybatis相对平静,工具较少,当前最高版 ...
- DNS错误 事件4000 4013
DNS 错误事件4000 4013,无法创建活动目录本身的区域 WINDOWS 2003 DNS服务器无法解析 错误ID 4000 DNS 服务器无法打开 Active Directory.这台 DN ...
- 自实现CAS原理JAVA版,模拟下单库存扣减
在做电商系统时,库存是一个非常严格的数据,根据CAS(check and swap)原来下面对库存扣减提供两种方法,一种是redis,一种用java实现CAS. 第一种 redis实现: 以下这个类是 ...
- 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10 http://www.jb51.net/css/383986.html
在网站开发中不免因为各种兼容问题苦恼,针对兼容问题,其实IE给出了解决方案Google也给出了解决方案百度也应用了这种方案去解决IE的兼容问题 百度源代码如下 复制代码 代码如下: <!Do ...
- 【转载】windows平台安装nodejs过程
第一步 下载nodejs 访问https://nodejs.org/en/download/url 根据您的系统是32位或64位,按照文字说明进行下载 第二步 安装nodejs 双击运行nodejs的 ...
- List接口
1.List接口实现的方式有两种ArrayList 和 LinkedList ArrayList实现了可变的数组,允许保存所有元素包括null,缺点是删除的比较慢 LinkedList删除对象比较快, ...
- git上传到阿里云code
一.在阿里云code(kelude)注册用户,新建项目.二.安装Git后使用GitBash生产ssh key:(https://zhidao.baidu.com/question/1303468264 ...
- Visual Studio 2012 trial version
Update: vs2012.5.iso http://download.microsoft.com/download/9/F/1/9F1DEA0F-97CC-4CC4-9B4D-0DB45B8261 ...
- 开发android App干坏事(一)
最近都是在搞java,android的知识,前两天生日朋友和我聊到,有一个认识的人通过反编译android程序往里面插入广告积分墙赚了很大一笔钱,很短时间内赚了几十万,(为毛感觉这已经是扯淡篇了,转入 ...
- Java中的内部类(回调)
一.内部类的主要作用如下: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据 3. 内部类所 ...