leetcode旋转数组查找 二分查找的变形
2014-07-09 21:34
549 查看
http://blog.csdn.net/pickless/article/details/9191075
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.
设置 low=0 high=len-1
bsearch(A,low,high)=bsearch(A,low,mid-1)||bsearch(A,mid+1,high) (A[mid]!=target)
mid (A[mid]==target)
这是传统的思路:
我们经过观察发现,只要 A[high]>=A[low] 数组一定是递增的,则选用二分查找
如果不是,则分割 ,使用递归,一定能分割成数组满足第一种状态,
比如,上边的例子我们查找 5,
mid=3,A[mid]=7;分割成(4,5,6)和(0,1,2)连个尾巴都是大于首部,所以直接会被二分查找。
View Code
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.
设置 low=0 high=len-1
bsearch(A,low,high)=bsearch(A,low,mid-1)||bsearch(A,mid+1,high) (A[mid]!=target)
mid (A[mid]==target)
这是传统的思路:
我们经过观察发现,只要 A[high]>=A[low] 数组一定是递增的,则选用二分查找
如果不是,则分割 ,使用递归,一定能分割成数组满足第一种状态,
比如,上边的例子我们查找 5,
mid=3,A[mid]=7;分割成(4,5,6)和(0,1,2)连个尾巴都是大于首部,所以直接会被二分查找。
public class Solution { public int search(int[] A, int target) { int len=A.length; if(len==0) return -1; return bsearch(A,target,0,len-1); } public int bsearch(int A[],int target,int low,int high) { if(low>high) return -1; int idx=-1; if(A[low]<=A[high]) //it must be YouXu,so binary search { while(low<=high) { int mid=(low+high)>>1; if(A[mid]==target) { idx=mid; return idx; } else if(A[mid]>target) { high=mid-1; } else low=mid+1; } } else { int mid=(low+high)>>1; if(A[mid]==target) { idx=mid; return idx; } else { idx=bsearch(A,target,low,mid-1); if(idx==-1) { idx=bsearch(A,target,mid+1,high); } } } return idx; } }
View Code
相关文章推荐
- LeetCode-Find Minimum in Rotated Sorted Array II-旋转排序数组找最小-二分查找
- LeetCode-Search in Rotated Sorted Array II-在旋转数组中搜索-二分查找
- 【leetcode】在旋转排序数组中查找(二分)
- leetcode 编程题 系列 (二分查找)旋转数组的查找、重复数字 33 153
- leetcode 81. Search in Rotated Sorted Array II 旋转数组查找+二分查找
- leetcode 154. Find Minimum in Rotated Sorted Array II 旋转数组(重复)+二分查找
- 【leetcode】有重复的旋转排序数组查找(二分)
- leetcode 153. Find Minimum in Rotated Sorted Array 旋转数组(不重复)+二分查找
- leetcode 81. Search in Rotated Sorted Array II-旋转数组|二分查找
- 在一个旋转过的有序数组上实现二分查找 收藏
- Search in Rotated Sorted Array II 旋转数组二分查找 有重复
- LeetCode-Search in Rotated Sorted Array-旋转数组中的搜索-二分搜索+代数逻辑
- LeetCode | Search in Rotated Sorted Array(在旋转数组中查找)
- [LeetCode]Median of Two Sorted Arrays 二分查找两个有序数组的第k数(中位数)
- [C++]LeetCode: 118 Find Peak Element (二分查找 寻找数组局部峰值)
- 【LeetCode刷题】旋转数组的查找 Search in Rotated Sorted Array
- leetcode题解:Search in Rotated Sorted Array(旋转排序数组查找)
- 旋转数组的二分查找
- 2014-04-04 循环递增数组查找元素(二分变形思想,百度面试题)
- LeetCode Search in Rotated Sorted Array 在旋转了的数组中查找