其实二分查找是一种很简单的搜索方法,它在有序的数据查找中有着不可思议的力量,甚至在某些数学领域有着出乎意料的表现,这都是因为一个原因。这个原因是二分查找实现简洁而且算法复杂度仅为O(log(n))。
在我看来,所有的二分查找解题方式分为两种形式:一种是二分答案,另一种是二分下标。至于这两个有什么不同,容我买个关子,等下看具体例子的时候,你就明白了,请看下列三题,题目按照难易度排列:
第一题,在一个有序数论中找到第一个大于等于要求的数的数。
第二题,请用二分查找实现sqrt(int x)函数。
第三题,有两个有序数组长度分别为M,N,分别取其中两个数组中的任意一个元素相加(乘),这样能得到M*N个数,请找出其中最K大(小)的值。
第一题就是二分下标,其他就是二分答案,解题思路会在接下来的分析中慢慢提到,以上的第二,三题在找工作时有碰到。