lintcode-寻找旋转排序数组中的最小值 java 需复习

题目描述:

假设一个旋转排序的数组其起始位置是未知的(比如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]会变成后面序列的最小值。

原文地址:https://www.cnblogs.com/czwangzheng/p/8416958.html