美文网首页
旋转数组最小值

旋转数组最小值

作者: IT_Matters | 来源:发表于2016-07-07 11:15 被阅读52次

将一个非递减序列的某一处切一刀,再把前半段序列放到后半段序列的后面,这样组成的新序列叫做“旋转数组”。要求获取一个旋转数组的最小值。给定数组arr及它的大小n,请返回最小值。

测试样例:
[4,1,2,3,3],5
返回:1

思路

如果旋转的长度为0,即arr[0]<arr[n-1],数组仍然是一个非递减序列,直接返回第一个元素即可.

否则将数组看成两个排序的子数组, 最小的元素就是两个数组的分界点.用二分查找的思想去查找分界点.

如果arr[lo]>arr[mid],说明arr[mid]肯定落在了第二个子数组上,此时hi=mid.
如果arr[mid]>arr[hi],说明arr[mid]肯定落在了第一个子数组上,此时lo=mid.
lo和hi逐步向分界点逼近,直到arr[lo]是第一个子数组的最后一个元素,arr[hi]元素是第二个子数组的第一个元素,即分界点.此时返回arr[hi].

如果上述两个条件都不满足,说明arr[lo]<=arr[mid],并且arr[hi]>=arr[mid],又有arr[lo]>=arr[hi],得出arr[lo]=arr[mid]=arr[hi].此时没有办法缩小范围.只能通过遍历的方式去查找最小值.

代码

 public int getMin(int[] arr, int n) {
        int lo=0,hi=n-1;
        int mid=0;
        if(arr[lo]<arr[hi]){
            return arr[lo];
        } 
        while(lo!=hi-1){                 
            mid=lo+(hi-lo)/2;            
            if(arr[lo]>arr[mid]){    
                hi=mid;
            }
            else if(arr[mid]>arr[hi]){ 
                lo=mid;
            }
            else{              
                while(lo<=hi&&arr[lo]==arr[hi]){
                    lo++;
                }
                return arr[lo];
            }
        }
        return arr[hi];
    }

相关文章

  • 旋转数组的最小值

    旋转数组的最小值 所谓旋转数组,即是递增有序数组旋转右移动若干位得到的数组,这里的右移和java里的>>>有点不同...

  • [剑指offer]08-旋转数组的最小数字

    旋转数组的最小数字 题目 给定一个递增的旋转数组A,返回旋转数组中的最小值。旋转数组:给定一个已排序的数组,假设为...

  • leetcode 题解

    1. 关于旋转数组 旋转数组求最小值,最大值,以及任意值:https://leetcode.windliang.c...

  • Java日记2018-08-10

    find minimum in rotated sorted array II旋转数组找到最小值,其中数组有重复值...

  • 面试题11-旋转数组求最小数

    题目要求 旋转数组是指将数组的元素逐个移动至数组尾部。现在有一个递增的数组,将数组旋转后,求数组的最小值。 题目解...

  • 二分法查找

    1,二分法查找,插入元素位置 2,数组旋转,求最小值问题 参考 旋转数组的最小元素

  • 寻找旋转排序数组中的最小值

    Leetcode题目地址 寻找旋转排序数组中的最小值 I 解法二:

  • LeetCode-153-寻找旋转排序数组中的最小值

    寻找旋转排序数组中的最小值 题目描述:已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后...

  • 旋转数组最小值

    将一个非递减序列的某一处切一刀,再把前半段序列放到后半段序列的后面,这样组成的新序列叫做“旋转数组”。要求获取一个...

  • leetcode153 寻找旋转排序数组中的最小值 golang

    153. 寻找旋转排序数组中的最小值[https://leetcode-cn.com/problems/find-...

网友评论

      本文标题:旋转数组最小值

      本文链接:https://www.haomeiwen.com/subject/nwcljttx.html