/**
* 当查找到满足条件的值且是从左到右第一个的时候,right=mid-1,继续二分查找,
* 会一直从left查找到nums[mid]=target的mid,
* 1-----2 ---> 1-----2 ---> 1-----2 ---> 不满足条件返回a
* a(mid) b ab(mid) b a
*
* @param nums
* @param target
* @return
*/
public static int search1(int[] nums, int target) {
if (nums == null || nums.length == 0) {
return -1;
}
int a = 0;
int b = nums.length - 1;
while (a <= b) {
int mid = (a + b) / 2;
if (nums[mid] > target) {
b = mid - 1;
} else if (nums[mid] < target) {
a = mid + 1;
} else {
b = mid - 1;
}
}
if (a >= nums.length || nums[a] != target) {
return -1;
}
return a;
}