难点在于情况真的很多需要逐一判断,画个走向图再写判断条件就行了。
还有处理边界条件也比较麻烦。
class Solution {
public:int search(vector<int>& nums, int target) {int left=0;int right=nums.size()-1;while(left<=right){int mid=(left+right)/2;if(nums[mid]==target) return mid;if(nums[mid]>=nums[left]){if(nums[mid]>target){if(nums[left]>target) left=mid+1;else if(nums[left]<target) right=mid-1;else return left;}else left=mid+1;}else{if(nums[mid]>target) right=mid-1;else{if(nums[right]>target) left=mid+1;else if(nums[right]<target) right=mid-1;else return right;}}}return -1;}
};
如果实在不会就将所有情况都列出来。