面试题:竟然有90%的程序员不能把这个算法完全写正确。。。

前几天,在论坛上看到有统计说有90%的程序员不能够写对简单的二分法。二分法不是很简单的吗? 这难道不是耸人听闻?

学习Python中的小伙伴,需要学习资料的话,可以前往我的微信公众号:速学Python,后台回复:cadn,即可拿Python学习资料

这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。送给正在学习python的小伙伴!这里是python学习者聚集地,欢迎初学和进阶中的小伙伴!

其实,二分法真的不那么简单,尤其是二分法的各个变种。 最最简单的二分法,就是从一个排好序的数组之查找一个key值。 如下面的程序。

这个程序,相信只要是一个合格的程序员应该都会写。 稍微注意一点, 每次移动left和right指针的时候,需要在mid的基础上+1或者-1, 防止出现死循环, 程序也就能够正确的运行。

但如果条件稍微变化一下, 你还会写吗?如,数组之中的数据可能可以重复,要求返回匹配的数据的最小(或最大)的下标;更近一步, 需要找出数组中第一个大于key的元素(也就是最小的大于key的元素的)下标,等等。 这些,虽然只有一点点的变化,实现的时候确实要更加的细心。 下面列出了这些二分检索变种的实现。

1、找出第一个与key相等的元素

2、找出最后一个与key相等的元素

3、查找第一个等于或者大于Key的元素

4、查找第一个大于key的元素

5、查找最后一个等于或者小于key的元素

6、查找最后一个小于key的元素

接下来,大家可以对这四种变种算法进行相应的测试。

很多的时候,应用二分检索的地方都不是直接的查找和key相等的元素,而是使用上面提到的二分检索的各个变种,熟练掌握了这些变种,当你再次使用二分检索的检索的时候就会感觉的更加的得心应手了。

猜你喜欢

转载自blog.csdn.net/Python_1_3/article/details/89241751