Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
Find the minimum element.
You may assume no duplicate exists in the array.
对于Rotated Sorted Array系列,可以考虑用二分法
对于这道题,如果mid在区间1中,则num[mid]>num[low],如果mid在区间二中,则num[mid]<num[low]
用二分法搜索,最终结为low在第一个递增数组的最后一个,即指向最大的一个元素,hi指向的是第二个递增数组的第一个元素,即终结条件为hi-lo=1
此时最小的元素为hi指向的元素
但是可能出现一种情况,即将第0个元素旋转,则整个数组为一个递增数组 此时应为数组的第一个元素
1 package Find.Minimum.in.Rotated.Sorted.Array; 2 3 /** 4 * @author dell 5 *运用二分查找法进行查找 6 *查询效率为lgN 7 */ 8 public class FindMinimuminRotatedSortedArray { 9 public int findMin(int[] num) {10 int lo=0;11 int hi=num.length-1;12 int mid=lo;13 if(num.length==1) return num[0];14 //可能出现将前面的第0个元素搬到后面,此时整个数组是递增有序的15 //此时的情况是num[lo]=num[hi]){17 //当hi-lo=1时此时的hi为第二个递增数组的第一个元素,即为最小元素18 if(hi-lo==1){19 mid=hi;20 break;21 }22 mid=(lo+hi)/2;23 if(num[mid]