Leetcode@Search in Rotated Sorted Array
2015-01-04 18:39
295 查看
题目:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e.,
0 1 2 4 5 6 7might 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(n) 其实这是最容易想到的解法class Solution { public: int search(int A[], int n, int target) { if(A == NULL || n <= 0) return -1; for(int i = 0; i < n; ++i) if(A[i] == target) return i; return -1; } };
(2)二分搜索 属于从有序数组中查找某个值的变形 时间复杂度O(logn)
如果在l到r的区间内搜索,有如下两种情况:
1.A[l] < A[r] 那么表明区间是有序排列的,按照正常的二分搜索处理
2.A[l] > A[r] 这表明区间存在翻转,那么存在一个k,使得A[k]是区间内的最小值,这样,A[l]到A[k] 与A[k+1]到A[r]为两个有序数组
所以只需要对A[mid]与A[r]作比较:
1.如果A[mid] > A[r] 表明一定存在翻转,接下来只需要判断target的位置,如果target位于A[l]和A[mid]之间 ,r = mid - 1,否则l = mid + 1
2.r如果A[mid] < A[r] ,那么说明从m到r一定是有序的(没有受到rotate的影响),那么我们只需要判断target是不是在mid到r之间。如果target位于A[mid]和A[r]之间,正常二分搜索,把左边缘移到mid+1,l
= mid + 1,否则,target在另一半,把右边缘移动到mid-1,r = mid - 1
class Solution { public: int search(int A[], int n, int target) { if(NULL == A || 0 == n) return -1; int left = 0, right = n-1, mid = 0; while(left <= right) { mid = left+(right-left)/2; if(A[mid] == target) return mid; else if(A[mid] > A[right])//left { if(A[left] <= target && target < A[mid]) right = mid - 1; else left = mid + 1; } else//right { if(A[mid] < target && target <= A[right]) left = mid + 1; else right = mid - 1; } } return -1; } };
相关文章推荐
- [LeetCode] Search in Rotated Sorted Array II
- LeetCode : Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array 解题报告
- [leetcode] Search in Rotated Sorted Array
- [LeetCode]Search in Rotated Sorted Array
- leetcode 97: Search in Rotated Sorted Array
- LeetCode Search in Rotated Sorted Array
- [LeetCode] Search in Rotated Sorted Array II 解题报告
- [LeetCode] Search in Rotated Sorted Array
- [LeetCode] Search in Rotated Sorted Array
- [Leetcode] Search in Rotated Sorted Array
- leetcode 97: Search in Rotated Sorted Array
- LeetCode: Search in Rotated Sorted Array
- [leetcode] Search in Rotated Sorted Array II
- LeetCode Online Judge 题目C# 练习 - Search in Rotated Sorted Array
- LeetCode : Search in Rotated Sorted Array
- leetcode 98: Search in Rotated Sorted Array II
- LeetCode_Search in Rotated Sorted Array
- [LeetCode] Search in Rotated Sorted Array II
- LeetCode —— Search in Rotated Sorted Array