BM21 旋转数组的最小数字

有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。
 
数据范围:1 \le n \le 100001n10000,数组中任意元素的值: 0 \le val \le 100000val10000
要求:空间复杂度:O(1)O(1) ,时间复杂度:O(logn)O(logn)
  
import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        int left = 0;
        int right = array.length - 1;
        while(left < right){
            int mid = (left + right) / 2;
            //最小的数字在mid右边
            if(array[mid] > array[right])
                left = mid + 1;
            //无法判断,一个一个试
            else if(array[mid] == array[right])
                right--;
            //最小数字要么是mid要么在mid左边
            else
                right = mid;
        }
        return array[left];
    }
}

 

posted on 2022-06-14 16:18  MaXianZhe  阅读(21)  评论(0编辑  收藏  举报

导航