LeetCode 33 Search in Rotated Sorted Array
首先,不管有序数组怎么旋转,旋转之后肯定至少有一侧是顺序的
比如下图中第二行的右半侧和第三行的左半侧,可以利用这个条件进行判断
判读右半侧是否有序时的条件是:nums[mid] < target <= nums[right] 需要考虑到右侧的边界,左侧同理。
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0, right = nums.size()-1;
while(left <= right){
int mid = (right+left)/2;
if(nums[mid] == target) return mid;
if(nums[mid] <= nums[right]){//右侧有序
if(nums[mid] < target && target <= nums[right])
left = mid+1;
else
right = mid-1;
}
else//左侧有序
if(nums[left] <= target && target < nums[mid])
right = mid-1;
else
left = mid+1;
}
return -1;
}
};