二分查找
public int search(int[] nums, int target) {
if (nums == null || nums.length == 0) {
return -1;
}
int mid,start = 0,end = nums.length - 1;
while (start <= end) {
mid = start + (end - start) / 2; //防止越界
if (nums[mid] == target) { //中间值是目标值则直接返回
return mid;
}
//如果前半部分有序,注意此处用小于等于
if (nums[start] <= nums[mid]) {
//如果target在前半部分 将end-1
if (target >= nums[start] && target < nums[mid]) {
end = mid - 1;
} else { //如果target在前半部分 将start+1
start = mid + 1;
}
} else { //如果后半部分有序
//如果target在后半部分
if (target <= nums[end] && target > nums[mid]) {
start = mid + 1;
} else { //如果target在前半部分
end = mid - 1;
}
}
}
return -1;
}