
初始代码
class Solution {
public int search(int[] nums, int target) {
}
}
解题思路
- 假设target是在一个左闭右开的区间内
[left,right],其中right = nums.length
- 因为是左闭右开,所以
while(left < right)
- 取一个中间值
mid,mid = (left + right) >> 1,将nums[mid]与target进行比较,判断mid属于哪一边区间
if (nums[mid] > target)则将right更新为mid,因为是左闭右开区间,后面不会再对nums[mid]进行比较
- 如果是
if (nums[mid] < target则将left更新为mid + 1,因为当前的nums[mid]已经比较过了,需要往右移一位
代码
class Solution {
public int search(int[] nums, int target) {
int l = 0, r = nums.length;
while (l < r) {
int mid = l + r >> 1;
if (nums[mid] < target) {
l = mid + 1;
} else if (nums[mid] > target) {
r = mid;
} else {
return mid;
}
}
return -1;
}
}