首页 > 编程语言 > 详细

旋转数组的最小数字

时间:2021-09-24 10:39:03      阅读:28      评论:0      收藏:0      [点我收藏+]

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。  

本题目比较简单,先叙述我个人的思路:

由于数组本身是一个递增结构,原先在前面较小的数值,被放到了数组后面,如果从前往后遍历,遇到一个比前一个数小的数值,那么说明找到了最小值。

注意只需要遍历到数组倒数第二个元素,若遍历到了最后,便不是旋转数组。

注意前几位数值相等的情况,比如2,2,2,0,1。

class Solution {
    public int minArray(int[] numbers) {
        for(int i = 0; i < numbers.length-1;i++){
            if(numbers[i] > numbers[i+1])  return numbers[i+1];
        }
        return numbers[0];

    }
}

时间复杂度为O(n)。

二分查找方法:经典算法,从左右两端查找。快,

class Solution {
    public int minArray(int[] numbers) {
        int low = 0;
        int high = numbers.length - 1;
        while (low < high) {
            int pivot = low + (high - low) / 2;
            if (numbers[pivot] < numbers[high]) {
                high = pivot;
            } else if (numbers[pivot] > numbers[high]) {
                low = pivot + 1;
            } else {
                high -= 1;
            }
        }
        return numbers[low];
    }
}

时间复杂度为O(logn)。

旋转数组的最小数字

原文:https://www.cnblogs.com/xiaoyu23363/p/15309697.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!