找回密码
 立即注册
首页 业界区 安全 剑指offer-6、旋转数组的最小数字

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

纪音悦 2025-6-26 07:13:09
题⽬描述

把⼀个数组最开始的若⼲个元素搬到数组的末尾,我们称之为数组的旋转。
输⼊⼀个⾮递减排序的数组的⼀个旋转,输出旋转数组的最⼩元素。
例如数组 {3,4,5,1,2} 为 {1,2,3,4,5} 的⼀个旋转,该数组的最⼩值为 1 。
NOTE:给出的所有元素都⼤于 0 ,若数组⼤⼩为 0 ,请返回 0 。
思路及解答

在这⾥最重要的特征是 ⾮递减排序,也就是本来是递增的,如果旋转后会出现什么情况呢?
肯定会出现先递增,再递减的情况,只要我们找出这个点,其实就是最⼩的值。
⼤致有以下两种⽅式解答:

  • 直接遍历,当出现后⾯的数⽐前⾯的数⼩的时候,就是找到了最⼩的数。
  • 使⽤⼆分查找,在已经排序过的数组中常⽤的算法。
直接遍历
  1. import java.util.ArrayList;
  2. public class Solution {
  3.         public int minNumberInRotateArray(int [] array) {
  4.                 if(array == null || array.length == 0){
  5.                         return 0;
  6.                 }
  7.                 if(array.length == 1){
  8.                         return array[0];
  9.                 }
  10.                 int max = array[0];
  11.                
  12.                 for(int i=1; imax){
  13.                                 max = array[i];
  14.                         }
  15.                         if(array[i]<max){
  16.                                 return array[i];
  17.                         }
  18.                 }
  19.                 return 0;
  20.         }
  21. }
复制代码

  • 时间复杂度: ⼆分解法,为O(logN)
  • 空间复杂度:没有开辟额外的空间,为 O(1)

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册