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); }