力扣33.搜索旋转排序数组
-
先找到峰顶下标
- 分两段求target
-
class Solution { public: int search(vector<int>& nums, int target) { if(nums.size() == 1) return nums[0] == target ? 0 : -1; int peak = max_element(nums.begin(),nums.end()) - nums.begin(); int l = 0,r = peak; while(l<r) { int mid = l + r >> 1; if(nums[mid] >= target) r = mid; else l = mid + 1; } if(l != peak+1 && nums[l] == target) return l; l = peak+1,r = nums.size() - 1; while(l<r) { int mid = l + r >> 1; if(nums[mid] >= target) r = mid; else l = mid + 1; } if(l != nums.size() && nums[l] == target) return l; return -1; } };