[Leetcode] search in rotated sorted array 搜索旋转有序数组
2017-07-09 15:00
561 查看
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e.,0 1 2 4 5 6 7might become4 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.
题意:在以某点旋转以后的有序数租中找目标值。数组中没有重复的元素。
思路:刚开始是否是求旋转之后(或者之前的)的目标值在数组中的下标,然后就写了一个遍历全数组的简单方法,发现是求现数组的下标(即旋转之后的)。当然若是直接遍历一遍数组,也可以找到,时间复杂为O(n)。题目给的原意不是这样的。所以尝试二分查找,发现当中间位置所对应的值小于最右边时,则,右边的是非降序列,此时只要判断目标值是否在这个区间内(如何判断?因为这段是非降的,所以只要取其首尾两个值和目标值对比即可),若在这个区间内,则对此区间进行下一次二分查找,若不在,则对左边进行二分查找;同理当中间值大于最右边值时,左边为非降序的,剩下的一样。
代码如下:
1 class Solution { 2 public: 3 int search(int A[], int n, int target) 4 { 5 if(n==0) return -1; 6 int lo=0,hi=n-1; 7 while(lo<=hi) 8 { 9 int mid=(lo+hi)/2; 10 if(A[mid]==target) 11 return mid; 12 else if(A[mid]<A[hi]) 13 { 14 if(A[mid]<target&&A[hi]>=target) 15 lo=mid+1; 16 else 17 hi=mid-1; 18 } 19 else 20 { 21 if(A[lo]<=target&&A[mid]>target) 22 hi=mid-1; 23 else 24 lo=mid+1; 25 } 26 } 27 return -1; 28 } 29 };
相关文章推荐
- [LeetCode] Search in Rotated Sorted Array 在旋转有序数组中搜索
- [LeetCode] Search in Rotated Sorted Array II 在旋转有序数组中搜索之二
- leetcode 7. 在有序可重复数组旋转后搜索 Search in Rotated Sorted Array II
- [LeetCode] 33. Search in Rotated Sorted Array 在旋转有序数组中搜索
- [Leetcode] search in rotated sorted array ii 搜索旋转有序数组
- leetcode 6. 在有序数组旋转后搜索 Search in Rotated Sorted Array
- [LeetCode] 81. Search in Rotated Sorted Array II 在旋转有序数组中搜索 II
- leetCode 81.Search in Rotated Sorted Array II (旋转数组的搜索II) 解题思路和方法
- LeetCode 33. Search in Rotated Sorted Array(旋转数组搜索)
- LeetCode 81. Search in Rotated Sorted Array II(搜索旋转的数组)
- LeetCode 33 Search in Rotated Sorted Array(在旋转排序数组中搜索)(*)
- leetcode 33.Search in Rotated Sorted Array 旋转数组二分查找法搜索
- LeetCode 33. Search in Rotated Sorted Array(旋转有序数组,查找目标值Ⅰ)
- LeetCode-Search in Rotated Sorted Array II-在旋转数组中搜索-二分查找
- 【LeetCode-面试算法经典-Java实现】【081-Search in Rotated Sorted Array II(搜索旋转的排序数组)】
- LeetCode 33. Search in Rotated Sorted Array(在旋转有序序列中搜索)
- 【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】
- LeetCode-Search in Rotated Sorted Array-旋转数组中的搜索-二分搜索+代数逻辑
- LeetCode 81. Search in Rotated Sorted Array II(在旋转有序序列中搜索之二)
- [LeetCode] Find Minimum in Rotated Sorted Array II 寻找旋转有序数组的最小值之二