【剑指offer】-旋转数组的最小数字-06/67

简介: 【剑指offer】-旋转数组的最小数字-06/67

一 题目描述

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

输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。

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

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

二 题目分析

  1. 该数组原来是一个单调递增的数组,将前n个数字旋转到后面,输出最小的数字,假如数组大小为0的话,则返回0。
  2. 直接遍历循环输出最小的,这样的方法是最暴力的(不提倡)
  3. 借鉴二分法的思维方式
数组: 3 4 5     1 2 3
      ---1---   ---2---
1. 原数组旋转后,必然是两个有序的递增序列
2. 假如当前中间的元素大于最右面的元素,则证明现在处于2位置 left = mid + 1
3. 假如当前中间的元素小于最右面的元素,则证明现在处于1位置 right = mid
4. 假如当前中间的元素等于最右面的元素,则证明元素中出现了重复的,这时候需要挨个判断,直接right--

三 代码(Java)

import java.util.ArrayList;
public class Solution {
  public int minNumberInRotateArray(int[] array) {
    int len = array.length;
    if (len == 0) {
      return 0;
    } else {
      int left = 0;
      int right = len - 1;
      while (left < right) {
        int mid = (left + right) / 2;
        if (array[mid] < array[right]) {
          right = mid;
        } else if (array[mid] > array[right]) {
          left = mid + 1;
        }else {
          right--;
        }
      }
      return array[left];
    }
  }
}


相关文章
|
6月前
每日一题——旋转数组的最小数字(II)
每日一题——旋转数组的最小数字(II)
|
6月前
|
Java
每日一题《剑指offer》数组篇之旋转数组的最小数字
每日一题《剑指offer》数组篇之旋转数组的最小数字
39 0
每日一题《剑指offer》数组篇之旋转数组的最小数字
|
6月前
牛客网-旋转数组的最小数字
牛客网-旋转数组的最小数字
36 0
|
6月前
剑指Offer LeetCode 面试题11. 旋转数组的最小数字
剑指Offer LeetCode 面试题11. 旋转数组的最小数字
40 0
剑指offer-10.旋转数组最小的数字
剑指offer-10.旋转数组最小的数字
58 0
剑指Offer - 面试题11:旋转数组的最小数字
剑指Offer - 面试题11:旋转数组的最小数字
77 0
|
算法
剑指offer 10. 旋转数组的最小数字
剑指offer 10. 旋转数组的最小数字
55 0
剑指offer_数组---旋转数组的最小数字
剑指offer_数组---旋转数组的最小数字
42 0
|
算法 Java
旋转数组的最小数字(剑指offer 11)
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
旋转数组的最小数字(剑指offer 11)
使用二分法解决旋转数组的最小数字的问题
使用二分法解决旋转数组的最小数字的问题
92 0
使用二分法解决旋转数组的最小数字的问题