leetcode 33. Search in Rotated Sorted Array
rotated sorted array, 肯定有一半是有序的,只有一半中有旋转。
1 2 3 4 5 6
5 6 1 2 3 4(s-mid 是旋转的)
3 4 5 6 1 2 (mid-end 是旋转的)
没有旋转的一半中,起始点肯定小于终止点,找到没有旋转的一半,确定目标值是不是在这一半,如果没在就在旋转的一半中进行二分查找
int binarySearch(vector<int> & nums, int s, int e, int target)
{
if(nums[s]==target)
return s;
if(nums[e]==target)
return e;
if(s>=e)
return -1;
int mid=s+(e-s)/2;
if(nums[mid]==target)
return mid;
if(nums[mid]>nums[s])
{
if(nums[s]<target&& nums[mid]>target)
{
return binarySearch(nums, s, mid, target);
}
else
return binarySearch(nums, mid+1, e, target);
}
if(nums[mid+1]<=nums[e])
{
if(nums[mid]<target&& nums[e]>target)
return binarySearch(nums,mid+1, e,target);
else
return binarySearch(nums,s, mid, target);
}
}
int search(vector<int>& nums, int target) {
int n=nums.size();
if(n<1)
return -1;
return binarySearch(nums,0,n-1, target);
}

浙公网安备 33010602011771号