网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > Java >

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

时间:2025-06-26 09:00

人气:

作者:admin

标签:

导读:题⽬描述 把⼀个数组最开始的若⼲个元素搬到数组的末尾,我们称之为数组的旋转。 输⼊⼀个⾮递减排序的数组的⼀个旋转,输出旋转数组的最⼩元素。 例如数组 {3,4,5,1,2} 为 {1,2,3,4...

题⽬描述

把⼀个数组最开始的若⼲个元素搬到数组的末尾,我们称之为数组的旋转。

输⼊⼀个⾮递减排序的数组的⼀个旋转,输出旋转数组的最⼩元素。

例如数组 {3,4,5,1,2} 为 {1,2,3,4,5} 的⼀个旋转,该数组的最⼩值为 1 。

NOTE:给出的所有元素都⼤于 0 ,若数组⼤⼩为 0 ,请返回 0 。

思路及解答

在这⾥最重要的特征是 ⾮递减排序,也就是本来是递增的,如果旋转后会出现什么情况呢?

肯定会出现先递增,再递减的情况,只要我们找出这个点,其实就是最⼩的值。

⼤致有以下两种⽅式解答:

  • 直接遍历,当出现后⾯的数⽐前⾯的数⼩的时候,就是找到了最⼩的数。
  • 使⽤⼆分查找,在已经排序过的数组中常⽤的算法。

直接遍历

import java.util.ArrayList;

public class Solution {
	public int minNumberInRotateArray(int [] array) {
		if(array == null || array.length == 0){
			return 0;
		}

		if(array.length == 1){
			return array[0];
		}

		int max = array[0];
		
		for(int i=1; i<array.length; i++){
			if(array[i]>max){
				max = array[i];
			}
			if(array[i]<max){
				return array[i];
			}
		}
		return 0;
	}
}

⼆分法

旋转之后的数组其实就是分成两段,⽐如 {3,4,5,1,2} ,可以看到, 3 , 4 , 5 是递增的,但是 5之后1 就是⽐之前的数⼩的,这样就可以找到最⼩值 1 。

取出中间元素,和最右边元素⽐较,如果中间元素⼤于最右边元素,则证明,最⼩值存在于中间元素到最右边元素之间的⼀段。如果中间元素⼩于最右边元素,则证明,最⼩值在最左边元素到中间元素之间的⼀段中。

有⼀种特殊情况,就是相同元素,这样我们没有办法判断最⼩的元素位于哪⼀段,所以只能将右边的边界向左移动,即high-- 。

public class Solution {
    public static int minNumberInRotateArray(int[] array) {
        if (array == null || array.length == 0) {
        	return 0;
        }
        
        if (array.length == 1) {
        	return array[0];
        }
        
        int low = 0, high = array.length - 1;
        
        while (high - low > 1) {
            int mid = (low + high) / 2;
            if (array[mid] > array[high]) {
            	low = mid;
            } else if (array[mid] < array[high]) {
            	high = mid;
            } else {
            	high--;
            }
        }
        return Math.min(array[low], array[high]);
    }
}
  • 时间复杂度: ⼆分解法,为O(logN)
  • 空间复杂度:没有开辟额外的空间,为 O(1)

本文来自在线网站:seven的菜鸟成长之路,作者:seven,转载请注明原文链接:www.seven97.top

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信