33 搜索旋转排序数组题目描述:
方法效率:
//二分查找法
class Solution {
public int search(int[] nums, int target) {
int len=nums.length;
int left=0;
int right=len-1;
int middle=0;
if(len==0){
return -1;
}
if(len==1){
return nums[0]==target?0:-1;
}
while(left<=right){
middle=(right+left)/2;
if(nums[middle]==target){
return middle;
}
if(left==right){
return -1;
}
if(nums[left]<nums[right]){
if(nums[middle]<target){
left=middle+1;
}else{
right=middle-1;
}
}else{
if(target>nums[len-1]&&target<nums[0]){
return -1;
}
if(nums[left]<=nums[middle]){
if(target>=nums[left]&&target<nums[middle]){
right=middle-1;
}else{
left=middle+1;
}
} else {
if(target>=nums[middle]&&target<=nums[right]){
left=middle+1;
}else{
right=middle-1;
}
}
}
}
return -1;
}
}