33. Search in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
1 // 时间复杂度 O(log n) 二分查找 先判断mid在左侧还是右侧递增序列 然后二分查找target 2 class Solution 3 { 4 public: 5 int search(vector<int>& nums, int target) 6 { 7 int first = 0; 8 int last = first + nums.size(); // 尾后 9 10 while (first != last) 11 { 12 const int mid = first + (last - first) / 2; 13 14 if (nums[mid] == target) // mid等于target直接返回 15 { 16 return mid; 17 } 18 19 if (nums[first] <= nums[mid]) // mid位于左边的递增序列 20 { 21 if (nums[first] <= target && target < nums[mid]) // target在first与mid之间 22 { 23 last = mid; 24 } 25 else 26 { 27 first = mid + 1; 28 } 29 } 30 else // mid位于右边的递增序列 31 { 32 if (nums[mid] < target && target <= nums[last - 1]) 33 { 34 first = mid + 1; 35 } 36 else 37 { 38 last = mid; 39 } 40 } 41 } 42 43 return -1; 44 } 45 };