题解 | #二分查找-I#
二分查找-I
https://www.nowcoder.com/practice/d3df40bd23594118b57554129cadf47b
题目分析
这是一道二分查找的板子题。
题目要求是要找出目标值 target 在上升整型数组 nums 的位置(下标),不存在则返回 。
思路【二分查找】
- 先确定要查找的边界范围,即
left = 0, right = nums.size() - 1。 - 找到范围的中间位置
mid = (left + right) / 2*。 - 判断 nums[mid] 是否就是要查找的 target 值:如果是,则返回位置;否则继续判断。
- 看 nums[mid] 和 target 值的大小关系。
·如果 nums[mid] 更大就说明 mid 太靠后,需调整right = mid - 1。
·否则说明 mid 太靠前,需调整left = mid + 1。 - 返回第二步调整 mid。
主要代码(C++)
int left = 0, right = nums.size() - 1; // (1)
while (left <= right) {
int mid = (left + right) >> 1; // (2)
if (nums[mid] == target) // (3)
return mid;
else if (nums[mid] < target) // (4)
left = mid + 1;
else right = mid - 1;
}
return -1;