怎样实现二分查找算法

例题:假设有一个已经排序的整数数组nums和一个目标值target,请问是否存在一个数在nums中等于target?

分析:我们可以使用二分查找算法来解决这个问题。首先将左右指针l和r都分别指向数组的左右端点,然后计算中间位置mid,如果nums[mid]等于target,则直接返回true;如果nums[mid]大于target,则说明target在左半部分,将右指针r更新为mid – 1;如果nums[mid]小于target,则说明target在右半部分,将左指针l更新为mid + 1。重复上述过程,直到找到target或左指针大于右指针为止。

Java代码实现:

public static boolean binarySearch(int[] nums, int target) {
    int l = 0, r = nums.length - 1;
    while (l <= r) {
        int mid = l + (r - l) / 2;
        if (nums[mid] == target) {
            return true;
        } else if (nums[mid] > target) {
            r = mid - 1;
        } else {
            l = mid + 1;
        }
    }
    return false;
}

代码分析:

  • 首先将左右指针l和r都分别指向数组的左右端点。
  • 计算中间位置mid,如果nums[mid]等于target,则直接返回true;如果nums[mid]大于target,则说明target在左半部分,将右指针r更新为mid – 1;如果nums[mid]小于target,则说明target在右半部分,将左指针l更新为mid + 1。
  • 重复上述过程,直到找到target或左指针大于右指针为止。
  • 最终返回false,表示没有找到target。