/**
* 先简单处理下,找到tmp临界点,再确定左右范围
*
* @param nums
* @param target
* @return
*/
public static int search_1(int[] nums, int target) {
// write code here
int right = nums.length - 1;
int left = 0;
int tmp = 0;
int j = 0;
for (int i = 0; i < nums.length; i++) {
if (i + 1 < nums.length) {
if (nums[i + 1] < nums[i]) {
tmp = nums[i];
j = i;
break;
}
}
}
if (nums[right] > target && target > tmp) {
left = j;
} else if (nums[0] < target && target < tmp) {
right = j;
}
while (left <= right) {
int mid = (left + right) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] > target) {
right = mid - 1;
} else if (nums[mid] < target) {
left = mid + 1;
}
}
return -1;
}