LeetCode @ Search in Rotated Sorted Array 旋转数组查找
2014-07-14 06:13
507 查看
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.
来源于Code_Ganker:http://blog.csdn.net/linhuanmars/article/details/20525681
1.my_idea:因为是旋转数组,则一定至少有一半是有序的
2."因为rotate,当我们切取一半的时候可能会出现误区,所以要进一步判断。每次迭代中,分三种情况:"
(1)如果target==A[mid],直接返回mid;
(2)如果A[mid]<A[right],那么(mid,right)一定有序;进一步如果target属于有序区间(A[mid],A[right]】,则left=mid+1,否则target在leftHalf,则right=mid-1。
(3)如果A[mid]>=A[right],那么(mid,right)一定无序,既从left到mid有序;进一步如果target属于有序区间【A[left],A[mid]),则right=mid-1,否则在rightHalf,则left=mid+1。
3.每次切掉一半数据,所以算法的时间复杂度是O(logn),空间复杂度是O(1)。
【后记】这个if判断没有和别的题目统一,所以直接看后面LeetCode二分查找总结就好。
(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.
来源于Code_Ganker:http://blog.csdn.net/linhuanmars/article/details/20525681
1.my_idea:因为是旋转数组,则一定至少有一半是有序的
2."因为rotate,当我们切取一半的时候可能会出现误区,所以要进一步判断。每次迭代中,分三种情况:"
(1)如果target==A[mid],直接返回mid;
(2)如果A[mid]<A[right],那么(mid,right)一定有序;进一步如果target属于有序区间(A[mid],A[right]】,则left=mid+1,否则target在leftHalf,则right=mid-1。
(3)如果A[mid]>=A[right],那么(mid,right)一定无序,既从left到mid有序;进一步如果target属于有序区间【A[left],A[mid]),则right=mid-1,否则在rightHalf,则left=mid+1。
3.每次切掉一半数据,所以算法的时间复杂度是O(logn),空间复杂度是O(1)。
<span style="font-size:12px;">public class Solution { public int search(int[] A, int target) { int left=0; int right=A.length-1; while(left<=right){ int mid=(left+right)/2; if(A[mid]==target) //(1)一定要先写找到的case return mid; if(A[mid]<A[right]){ //(2)右边有序 if (A[mid]<target && target<=A[right])//如果在有序区间 left=mid+1; else right=mid-1; } else{ //(3)左边有序 if(A[left]<=target && target<A[mid])//如果在有序区间 right=mid-1; else left=mid+1; } } return -1; } }</span>
【后记】这个if判断没有和别的题目统一,所以直接看后面LeetCode二分查找总结就好。
相关文章推荐
- leetcode题解:Search in Rotated Sorted Array(旋转排序数组查找)
- leetcode 刷题之路 35 Search in Rotated Sorted Array II (旋转排序数组查找终极版)
- leetcode 81. Search in Rotated Sorted Array II-旋转数组|二分查找
- leetcode 题解:Search in Rotated Sorted Array II (旋转已排序数组查找2)
- LeetCode------33. Search in Rotated Sorted Array(旋转数组中查找)
- LeetCode-Search in Rotated Sorted Array II-在旋转数组中搜索-二分查找
- 【LeetCode刷题】旋转数组的查找 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 @ Search in Rotated Sorted ArrayII 旋转数组查找II
- Leetcode--Search in Rotated Sorted Array(旋转数组的查找)
- LeetCode Search in Rotated Sorted Array 在旋转了的数组中查找
- LeetCode | Search in Rotated Sorted Array(在旋转数组中查找)
- LeetCode Search in Rotated Sorted Array 在旋转了的数组中查找
- [LeetCode]26. Search in Rotated Array II旋转数组查找II
- 数组排序查找已排序的旋转后的数组中的数(Search in Rotated Sorted Array)
- [LeetCode]25. Search in Rotated Array旋转数组查找I
- 【LeetCode-面试算法经典-Java实现】【081-Search in Rotated Sorted Array II(搜索旋转的排序数组)】
- leetcode之Search in Rotated Sorted Array,剑指offer之旋转数组的最小数字