题目:
分析:在数组里面查找,首选使用二分搜素(二分查找),但是题目条件给的是某个点旋转了的数组,也就是数组分开两个部分有序,那么可以想到可以分开两个部分分别进行查找,需要先找到旋转点,剩下的就是二分搜索的工作
代码:
class Solution {
public int search(int[] nums, int target) {
if(nums == null || nums.length == 0){
return -1;
}
int breakPoint = nums.length - 1;
for(int i = 1; i < nums.length; i++){
if(nums[i] < nums[i-1]){
breakPoint = i-1;
break;
}
}
int result = binarySearch(nums, 0, breakPoint, target);
if(result < 0){
result = binarySearch(nums, breakPoint+1, nums.length-1, target);
return result;
}else{
return result;
}
}
public int binarySearch(int[] nums, int low, int high, int target){
while(low <= high){
int mid = low + (high-low)/2;
if(target < nums[mid]){
high--;
}else if(target > nums[mid]){
low++;
}else{
return mid;
}
}
//找不到
return -1;
}
}