此道题目跟Search in Rotated Sorted Array I的解题思路是一样的,唯一的不同是当中间元素等于首部元素时,查找区间有可能不再只包含一个或两个元素,此时没法判断哪一部分有序,只能将查找区间左边界加1。而在Search in Rotated Sorted Array I中,是将左边界赋值为mid+1。代码如下:
class Solution {
public:
bool search(vector<int>& nums, int target) {
int left = 0;
int right = (int)nums.size()-1;
while(left<=right){
int mid = (right+left)/2;
if(target==nums[mid])
return true; // 找到了
if(nums[left]<nums[mid]){ // 左半部分有序。
if(nums[left]<=target && target<nums[mid]){ // target在左半部分
right=mid-1;
}else{ // target不在左半部分
left=mid+1;
}
}else if(nums[left]>nums[mid]){ // 右半部分有序
if(nums[mid]<target && target<=nums[right]){ // target在右半部分
left=mid+1;
}else{ // target不在右半部分
right=mid-1;
}
} else { // 当nums[left]=nums[mid]时,没法判断哪部分有序
left++;
}
}
return false; // 没找到
}
};