思路
在已经排好序的情况下使用二分查找,首先声明最左值left,最右值right,中间值mid,这些值都是数组的下标值,不是数组元素值,不然你不知道怎么返回角标。。。
在数组由小到大的排序情况下,使用目标值与mid对比,目标值==mid,角标为mid;目标值大于mid,修改left值为mid+1,因为这时候目标值的范围变到了mid值的右边;同理,目标值小于mid,修改right值为mid-1,范围变为mid值左边。通过while循环找出目标值的位置,返回即可。
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length-1;
int mid = 0;
while(left <= right){
mid = left + (right - left) / 2;
if (nums[mid] == target) return mid;
if (nums[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}