代码如下
public int search(int[] nums, int target) {
int start = 0;
int end = nums.length-1;
int mid = 0;
while(start<=end){
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;
}
为什么*while(start<=end)*这里是start<=end而不是 “<” 呢?
因为初始化 right 的赋值是 nums.length - 1,即最后一个元素的索引,而不是 nums.length。
区别是:前者相当于两端都闭区间 [left, right],后者相当于左闭右开区间 [left, right),原因很简单,因为索引大小为 nums.length 是越界的。