数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力。

    二分查找涉及的很多的边界条件,逻辑比较简单,但就是写不好。

    例如到底是 while(left < right) 还是 while(left <= right),到底是 right = middle 呢,还是要 right = middle - 1 呢?

    大家写二分法经常写乱,主要是因为对区间的定义没有想清楚,区间的定义就是不变量。要在二分查找的过程中,保持不变量,就是在 while 寻找中每一次边界的处理都要坚持根据区间的定义来操作,这样在写二分查找的时候,就不会容易在风中凌乱了。

    704. 二分查找 是一道非常经典的二分题目,初学二分查找时,要多多练习,好好体会。

    其实,大家只要看到面试题里给出的数组是有序数组,都可以想一想是否可以使用二分法。

    我个人比较主张使用左闭右闭的区间来写二分,这样我认为比较好理解,因此整个二分查找系列我都会用这种方法来写。

    代码中定义 target 是在一个在左闭右闭的区间里,也就是 [left, right] (这个很重要)

    区间的定义直接决定了二分法的代码如何去写,大家要仔细看注释,思考为什么要写while(left <= right), 为什么要写right = middle - 1