【LeetCode】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.
读入一个元素就将这个元素插入unordered_map里,然后判断是否在里面。
class Solution { public: int search(vector<int>& nums, int target) { unordered_map<int, int> map; for(int i = 0; i < nums.size(); i++){ map[nums[i]] = i; if(map.find(target)!=map.end()){ return map[nums[i]]; } } return -1; } };
后面看看提交情况,发现自己还是too young too simple,本题考查的还是二分法搜索。
class Solution { public: int search(vector<int>& nums, int target) { int left = 0, right = nums.size()-1; while(left <= right) { int middle = left + ((right-left)>>1); if (nums[middle] == target) return middle; if (nums[middle] < nums[right]) { if (nums[middle] < target && target <= nums[right])left = middle + 1; else right = middle - 1; } else if (nums[middle] > nums[right]) { if (nums[left] <= target && target < nums[middle])right = middle - 1; else left = middle + 1; } else right--; } return -1; } };