704. 二分查找

704. 二分查找

题目链接
代码随想录

分析

二分查找的使用有前提条件

解题

public static int search(int[] nums, int target) {  
    int start = 0, end = nums.length - 1;  
    while (start <= end) {  
        // 其实这里并不需要精确取 start 和 end 的中间,取个大概即可,只要能大约缩减一般的搜索空间即可  
        int mid = start + (end - start) / 2;  
        if (nums[mid] == target) {  
            return mid;  
        } else if (nums[mid] < target) {  
            start = mid + 1;  
        } else {  
            end = mid - 1;  
        }  
    }  
    return -1;  
}

二分法为什么快?

二分法快就快在,经过一次循环就可以把搜索范围缩小一半,所有的精髓,都在 right = middle - 1; 和 left = middle + 1; 上
二分查找的本质,就是有序数列的一种快速遍历方式
二分法是查找有序数组最快的方式。
有序数组,且无重复元素,且要求使用 log(n) 的时间复杂度,基本上可以认为就是要求你用二分法查找。

类似题

35. 搜索插入位置
34. 在排序数组中查找元素的第一个和最后一个位置
69. x 的平方根