码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-02-05 14:34:00      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:else   dmi   art   二分   题目   需要   targe   int   代码   

题目描述:

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

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

标签:else   dmi   art   二分   题目   需要   targe   int   代码   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!