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

Posted moonbeautiful

tags:

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

题目描述

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

https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba?tpId=13&tqId=11159&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

 

 

 

package com.sunshine.OFFER66_SECOND;

import org.junit.Test;

public class A6_minNumberInRotateArray 

    @Test
    public void test() 
        int[] arr = 3, 1, 2;
        System.out.println(minNumberInRotateArray(arr));
        System.out.println(minNumberInRotateArray2(arr));
    


    public int minNumberInRotateArray(int[] array) 
        if (0 == array.length) 
            return 0;
        
        int min = array[0];
        for (int i = 1; i < array.length; i++) 
            if (array[i] < min) 
                min = array[i];
            
        
        return min;
    

    //个人感觉描述的不是很清楚,非递减排序的数组为什么就是一个递增数组的一个旋转。。虽然样例如此。
    //他人优解。
    public int minNumberInRotateArray2(int[] array) 
        if (0 == array.length) 
            return 0;
        
        int left = 0;
        int right = array.length - 1;
        while (left < right) 
            int mid = (left + right) / 2;
            if (array[mid] > array[right]) 
                left = mid + 1;
             else if (array[mid] < array[right]) 
                right = mid;
             else 
                right--;
            
        
        return array[right];
    

 

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

剑指 Offer 11. 旋转数组的最小数字 的详细题解

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

剑指offer---旋转数组的最小数字

旋转数组的最小数字-剑指Offer

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

剑指offer 6.旋转数组的最小数字