剑指Offer:旋转数组的最小数字11

Posted mrsaver

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer:旋转数组的最小数字11相关的知识,希望对你有一定的参考价值。

剑指Offer:旋转数组的最小数字【11】

题目描述

  把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

解题分析

我们用两个坐标,Left,Right分别表示左右两个递增序列的下标,刚开始L为0,R为4;

当Arr[Mid]>Arr[Left],可以说明,Mid及左边构成左递增序列,也就是Mid是左递增序列的一个值。

当Arr[Mid]<Arr[Right],可以说明,最小值为Mid或Mid的坐标的取值;

当Right-Left=1的时候,L已经是左递增序列的最右值,R已经是右递增序列的最左值,最小的当然为Arr[Right];

技术分享图片

  技术分享图片

Java代码

package arr;

import java.util.Scanner;

public class RotateArrFindMinNum {

    public static int minNumberInRotateArray(int ... array) {
        int left = 0;
        int right =array.length-1;
        int mid = 0;
        while (array[left]>=array[right])
        {
            if(right-left==1)
            {mid=right;
            break;}
            mid = left+(right-left)/2;
            if(array[mid]>=array[left])
                left=mid;
            if(array[mid]<=array[right])
                right=mid;
        }
        return array[mid];
    }

    public static void main(String[] args) {
        System.out.println(minNumberInRotateArray(8,9,1,2,3,4));
    }
}

 

以上是关于剑指Offer:旋转数组的最小数字11的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer:旋转数组的最小数字11

剑指 Offer 11. 旋转数组的最小数字暴力二分查找

LeetCode 剑指 Offer 11. 旋转数组的最小数字 | Python

剑指 Offer 11. 旋转数组的最小数字

双百解法剑指 Offer 11. 旋转数组的最小数字

#yyds干货盘点#剑指 Offer 11. 旋转数组的最小数字