33. Search in Rotated Sorted Array
2017-10-18 21:15
477 查看
Suppose an array sorted in ascending order 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。我们还是考虑二分搜索法,但是这道题的难点在于我们不知道原数组在哪旋转。
方法一:
方法二:
(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。我们还是考虑二分搜索法,但是这道题的难点在于我们不知道原数组在哪旋转。
方法一:
int SearchInRotatedSortedArray::search1(vector<int>& nums, int target) { return searchFrom(nums, target, 0, nums.size() - 1); } int SearchInRotatedSortedArray::searchFrom(vector<int>& nums, int target, int begin, int end) { if (begin > end) return -1; int indexMid = (begin + end) / 2; int valueMid = nums[indexMid]; if (valueMid == target) { return indexMid; } else if (valueMid > target) { if (target > nums[end]) { return searchFrom(nums, target, begin, indexMid - 1); } else { int value = searchFrom(nums, target, begin, indexMid - 1); return value == -1 ? searchFrom(nums, target, indexMid + 1, end) : value; } } else if (valueMid < target) { if (target < nums[begin]) { return searchFrom(nums, target, indexMid + 1, end); } else { int value = searchFrom(nums, target, begin, indexMid - 1); return value == -1 ? searchFrom(nums, target, indexMid + 1, end) : -1; } } }
方法二:
int SearchInRotatedSortedArray::search2(vector<int>& A, int target) { int l = 0; int r = A.size() - 1; while (l <= r) { int mid = (l + r) / 2; if (target == A[mid]) return mid; if (A[l] <= A[r]) { if (target < A[mid]) r = mid - 1; else l = mid + 1; } else if (A[l] <= A[mid]) { if (target > A[mid] || target < A[l]) l = mid + 1; else r = mid - 1; } else { if (target < A[mid] || target > A[r]) r = mid - 1; else l = mid + 1; } } return -1; }
相关文章推荐
- 33. Search in Rotated Sorted Array
- 算法分析与设计——LeetCode:33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- LeetCode-33. Search in Rotated Sorted Array
- [Leetcode]_33 Search in Rotated Sorted Array
- Leetcode_33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- Leetcode 33. Search in Rotated Sorted Array
- 33.Search in Rotated Sorted Array
- leetcode题解-33 Search in Rotated Sorted Array
- LeetCode - 33. Search in Rotated Sorted Array
- LeetCode: 33. Search in Rotated Sorted Array
- [leetcode] 33.Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- [leetcode 33]Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- Medium 33题 Search in Rotated Sorted Array
- LeetCode-33-Search in Rotated Sorted Array 水题
- 33. Search in Rotated Sorted Array