二分查找场景
二分搜索用于在一个单调或者局部单调有序数组中查找一个符合某些条件的值,时间复杂度为O(logN)
二分查找原理图解
拿升序数组为例子进行解释,假设我们需要再数组中找到目标值key的下标。
1、首先可以将数组按key所在下标划分为三个部分,左边是小于key的部分,然后中间是key值,右边为大于key的部分。
用left和right两个指针不断地缩小搜索区域。
2、取mid为left和right的中间值,如果mid在key的下标的左边(即nums[mid] < key)就将left移到mid+1的位置。
3、同理。如果mid在key下标的右边(nums[mid] > key),就将right移到mid-1。
直到nums[mid] == key或者left和right相等无法再移动。
如果有nums[mid] == key 则mid为key的下标,如果一直没有满足上述条件,最终left和righ指针相等,则返回-1,说明搜索完整个数组都没