例题:假设有一个已经排序的整数数组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。