题目描述:
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7可能变成是4 5 6 7 0 1 2)。
你需要找到其中最小的元素。
你可以假设数组中不存在重复的元素。
代码实现:
public class Solution { /* * @param nums: a rotated sorted array * @return: the minimum number in the array */ public int findMin(int[] nums) { if(nums==null||nums.length==0){ return -1; } int start = 0; int end = nums.length-1; int target = nums[start]; while(start+1 < end){ int mid = (start + end)/2; if (nums[mid] >= target){ start=mid; } else{ end = mid; } } if (nums[end] <= target){ return nums[end]; }else{ return target; } } }
备注:二分查找,取第一个元素为target,然后二分查找,中间元素和target相比较,最终
1.数组是正常顺序则nums[end]一定大于target,则第一个元素即target为最小值;
2.数组要不是正常顺序,则nums[end]一定小于第一个数;
3.数组要不是正常顺序,然后nums[start]会变成前面序列的最大值,nums[end]会变成后面序列的最小值。