思路:二分
如果 mid<right ,则右半边有序,判断target是否在右半边,否则在左半边寻找;另一部分同理
时间复杂度为 O(log n)
class Solution {
public int search(int[] nums, int target) {
int len=nums.length;
int left=0,right=len-1;
while(left<=right){
int mid=(left+right)/2;
if(nums[mid]==target) return mid;
else if(nums[mid]<nums[right]){//右半边有序
if(nums[mid]<target && target<=nums[right]) left=mid+1;//t在右半边
else right=mid-1;
}
else{//左半边有序
if(nums[left]<=target && target<nums[mid]) right=mid-1;
else left=mid+1;
}
}
return -1;
}
}