zoukankan      html  css  js  c++  java
  • 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]会变成后面序列的最小值。

  • 相关阅读:
    Qt 去除控件边框线
    Qt 自定义可编辑 模型视图
    Qt double类型输出问题
    vue实例
    初识vue
    python中的数据类型
    python 列表解析式
    Goland常用快键键 mac pro
    文档对象模型DOM
    正则表达式
  • 原文地址:https://www.cnblogs.com/czwangzheng/p/8416958.html
Copyright © 2011-2022 走看看