Leetcode NO.33 Search in Rotated Sorted Array
2015-01-29 11:16
127 查看
题目要求如下:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e.,
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.
本来开始我的思路是先把pivot找到,后来觉得这样会做很多无用功,脑子越转越乱。。
于是,后来想出一种只用一遍binary search变体的解法,代码如下:
除去直接找到的情况,逻辑是这样的:
1, A[mid] > target
1.1 A[low] > A[mid] > target: target必然在low-mid这个半区,因为另外的半区必然都大于A[mid]
1.2 A[low] <= A[mid], target < A[mid]
1.2.1:(A[low] < target < A[mid]):必然在low-mid半区
1.2.2:A[low] = target: 不解释
1.2.3: A[mid] > A[low] > target: target在mid-high半区
2, A[mid] < target
2.1 A[high]<A[mid] < target: target在mid-high半区
2.2 A[mid] < A[high],A[mid] < target:
2.2.1 A[mid]<target < A[high]:target在mid-high半区
2.2.2:相等:不解释
2.2.3: A[mid] < A[high] < target: target必然在low-mid半区
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.
本来开始我的思路是先把pivot找到,后来觉得这样会做很多无用功,脑子越转越乱。。
于是,后来想出一种只用一遍binary search变体的解法,代码如下:
class Solution { public: int search(int A[], int n, int target) { int low = 0; int high = n - 1; int mid; while (low <= high) { mid = (low + high) / 2; if (A[mid] == target) return mid; else if (A[mid] > target) { if (A[low] > A[mid]) { high = mid - 1; } else { if (A[low] < target) high = mid - 1; else if (A[low] == target) return low; else low = mid + 1; } } else { if (A[high] > A[mid]) { if (A[high] > target) low = mid + 1; else if (A[high] == target) return high; else high = mid - 1; } else { low = mid + 1; } } } return -1; } };这个算法的核心思想就是确定target在哪个半区
除去直接找到的情况,逻辑是这样的:
1, A[mid] > target
1.1 A[low] > A[mid] > target: target必然在low-mid这个半区,因为另外的半区必然都大于A[mid]
1.2 A[low] <= A[mid], target < A[mid]
1.2.1:(A[low] < target < A[mid]):必然在low-mid半区
1.2.2:A[low] = target: 不解释
1.2.3: A[mid] > A[low] > target: target在mid-high半区
2, A[mid] < target
2.1 A[high]<A[mid] < target: target在mid-high半区
2.2 A[mid] < A[high],A[mid] < target:
2.2.1 A[mid]<target < A[high]:target在mid-high半区
2.2.2:相等:不解释
2.2.3: A[mid] < A[high] < target: target必然在low-mid半区
相关文章推荐
- 【leetcode】No.33 Search in Rotated Sorted Array
- [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