class Solution {
public int search(int[] nums, int target) {
//在每一次将数组一分为二的时候,都会将数组分为两个子数组,一个子数组是有序的,一个子数组是无序的
//每次进行判断该数是否有可能存在于有序的子数组中,若存在于有序子数组中则使用二分查找
//否则就继续将无序子数组进行一分为二处理
return search(nums,target,0,nums.length-1);
}
public int search(int[] nums,int target,int start,int end){
if(start > end)
return -1;
int mid = (start+end) / 2;
if(nums[mid] == target)
return mid;
//左边数组下标start~mid;右边数组下标mid+1~end
if(nums[start] <= nums[mid]){
if(target >= nums[start] && target <= nums[mid])
return binarySearch(nums,target,start,mid);
else
return search(nums,target,mid+1,end);
}else{
if(target <= nums[end] && target >= nums[mid+1])
return binarySearch(nums,target,mid+1,end);
else
return search(nums,target,start,mid);
}
}
public int binarySearch(int[] nums,int target,int start,int end){
while(start <= end){
int mid = (start+end) / 2;
if(nums[mid] == target)
return mid;
else if(nums[mid] < target)
start = mid+1;
else
end = mid-1;
}
return -1;
}
}
leetcode33. 搜索旋转排序数组
最新推荐文章于 2024-10-10 22:59:02 发布