下面展示一些 内联代码片
。
执行用时:4 ms, 在所有 C++ 提交中击败了94.19%的用户
内存消耗:13.7 MB, 在所有 C++ 提交中击败了15.27%的用户
总的来说这道题的代码还是略显复杂。 首先去重,然后再在过程之中中间值判断时进行优化。
// C++ 代码
bool search(vector<int>& nums, int target) {
if(nums.size()==0)
return -1;
int left=0, right = nums.size()-1, mid;
//旋转的点可能在左边也可能在右边.首先去重
while(left < right && nums[left] == nums[right]){
left ++;
}
while(left < right){
mid= left + (right - left)/2;
if(nums[mid] == target || mid+1 <= right && nums[mid+1] == target){
return true;
}
if(nums[left] <= nums[mid] && target < nums[mid] && target >= nums[left]
|| nums[mid] <= nums[right] && (target < nums[mid] || target > nums[right])){//右边有序,但是在左边
right = mid -1;
}else{
left = mid + 1;
}
}
if(target == nums[left]){
return true;
}
return false;
}