LeetCode OJ 之 Search in Rotated Sorted Array (有序数组翻转后的查找)
2014-12-18 10:37
549 查看
题目:
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.。假设没有重复的数。
思路:
先参看查找有序数组中的最小值:http://blog.csdn.net/u012243115/article/details/41923667。本题依然使用二分法,难点在于如何判断 target 在前半段还是后半段。对于无重复的数组4 5 6 7 0 1 2,如果满足 A[begin]
<= A[mid] ,即数组的第一个值小于中间值 4 < 7 ,那么可以断定前半段数组有序。如果不满足这个条件,(比如:4 5 0 1 2) 则说明后半段有序。因为把这个数组从中间分开后,一定至少有半个数组是有序的。然后再判断 target 是否在有序的半段中(这个很好判断),如果在,则相当于在有序数组中查找,很简单。如果不在有序的那半段,则一定在另外半段里。然后使用迭代即可把target找出。
代码:
class Solution { public: int search(int A[], int n, int target) { int begin = 0; int end = n-1; while(begin <= end) { int mid = (begin + end)/2; //判断mid是否为target,如果是,直接返回,如果不是,再判断target是在前半段还是后半段 if(A[mid] == target) { return mid; } //如果前半段有序 if(A[begin] <= A[mid]) { //判断target是否在前半段,如果在,则继续遍历前半段,如果不在,则继续遍历后半段 if(A[begin] <= target && target < A[mid]) end = mid - 1; else begin = mid + 1; } //else说明后半段有序 else { //判断target是否在后半段,如果在,则继续遍历后半段,如果不在后半段,则继续遍历前半段 if(A[mid] < target && target <= A[end]) begin = mid + 1; else end = mid - 1; } } return -1; } };
相关文章推荐
- LeetCode OJ 之 Search in Rotated Sorted Array II (有序数组翻转后的查找 - 二)
- LeetCode OJ:Search in Rotated Sorted Array(翻转排序数组的查找)
- LeetCode OJ:Search in Rotated Sorted Array II(翻转排序数组的查找)
- LeetCode 33. Search in Rotated Sorted Array(旋转有序数组,查找目标值Ⅰ)
- Search in Rotated Sorted Array 在旋转过的有序数组中进行二分查找 重点看解法二 三(重重)
- Leetcode刷题记—— 33. Search in Rotated Sorted Array(在翻转顺序的数组里查找)
- LeetCode 33 Search in Rotated Sorted Array(循环有序数组中进行查找操作)
- LeetCode 81 Search in Rotated Sorted Array II(循环有序数组中的查找问题)
- LeetCode OJ 之 Find Minimum in Rotated Sorted Array (查找旋转有序数组中的最小值)
- Leetcode刷题记—— 81. Search in Rotated Sorted Array II(在翻转数组中查找2)
- 循环有序数组中的二分查找 Search in a rotated sorted array
- LeetCode OJ 之 Find Minimum in Rotated Sorted Array II(查找旋转有序数组中的最小值 - 二)
- 循环有序数组中的二分查找 Search in a rotated sorted array
- LeetCode | Search in Rotated Sorted Array(在旋转数组中查找)
- Leetcode--Search in Rotated Sorted Array(旋转数组的查找)
- leetcode 刷题之路 35 Search in Rotated Sorted Array II (旋转排序数组查找终极版)
- leetcode 7. 在有序可重复数组旋转后搜索 Search in Rotated Sorted Array II
- leetcode 6. 在有序数组旋转后搜索 Search in Rotated Sorted Array
- leetCode 33.Search in Rotated Sorted Array(排序旋转数组的查找) 解题思路和方法
- 【LeetCode刷题】旋转数组的查找 Search in Rotated Sorted Array