LeetCode-033-搜索旋转排序数组
思路
考虑二分查找
由于题目已经说明是无重复数字的,举个例子:
1 2 3 4 5 6 7 可以大致分为两类,
第一类 2 3 4 5 6 7 1 这种,也就是 nums[left] <= nums[mid]。此例子中就是 2 <= 5。
这种情况下,前半部分有序。因此如果 nums[left] <=target<nums[mid],则在前半部分找,否则去后半部分找。
第二类 6 7 1 2 3 4 5 这种,也就是 nums[left] > nums[mid]。此例子中就是 6 > 2。
这种情况下,后半部分有序。因此如果 nums[mid] <target<=nums[right],则在后半部分找,否则去前半部分找。
代码
class Solution {
public int search(int[] nums, int target) {
if(nums==null||nums.length==0){
return -1;
}
int left=0;
int right=nums.length-1;
while(left<=right){
int mid=left+(right-left)/2;
if(nums[mid]==target){
return mid;
}
if(nums[left]<=nums[mid]){
if(target<nums[mid]&&target>=nums[left]){
right=mid-1;
}
else{
left=mid+1;
}
}
else{
if(target>nums[mid]&&target<=nums[right]){
left=mid+1;
}
else{
right=mid-1;
}
}
}
return -1;
}
}