zoukankan      html  css  js  c++  java
  • 旋转数组的最小数字

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。  输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。

    例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。  NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

    java解法(牛客网通过):

     1 import java.util.ArrayList;
     2 public class Solution {
     3     public int minNumberInRotateArray(int[] array) {
     4            int len = array.length;
     5            if(array == null||len <1){
     6                return 0;
     7            }
     8           int index1 = 0;
     9           int index2 = len - 1;
    10         int indexMid = index1;
    11         while(array[index1] >= array[index2]){
    12             if(index2 - index1 ==1){
    13                 indexMid = index2;
    14                 break;
    15             }
    16             indexMid = (index1 + index2)/2;
    17              
    18             
    19             if(array[index1] == array[index2]&&array[indexMid] == array[index1])
    20                 return MinInOrder(array,index1,index2);
    21             if(array[indexMid] >= array[index1])
    22                 index1 = indexMid;
    23             if(array[indexMid] <= array[index2])
    24                 index2 = indexMid;
    25             
    26         }
    27         return array[indexMid];
    28         
    29     }                                         
    30     
    31      public int MinInOrder(int[] array,int index1,int index2){
    32         int result = array[index1];
    33         for(int i = index1 + 1;i<index2;i++){
    34             if(result > array[i])
    35                 result = array[i];
    36         }  
    37                 return result;
    38     }
    39 }
    MinInOrder()函数主要是处理特殊情况,当数组为{1,0,1,1,1}和{1,1,1,0,1}时,array[index1]=array[index2]=array[indexMid],因此无法确定中间数字1是否属于第一个还是第二个递增数组,此时当两个指针指向的数字及中间的数字三者相同的时候,无法判断中间数字是位于哪个数组中,也就无法通过移动指针来缩小查找范围,因此不得不用顺序查找的方法

    此题是二分查找的变形,因此要利用二分查找法实现O(logn)的查找。
  • 相关阅读:
    考试中一元三次方程的解法
    变限积分求导公式--加上自己理解
    柯西中值定理
    sec x的积分及注意事项
    线性代数
    IntelliJ IDEA无法新建类解决办法
    idea中Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.
    Windows 64位下安装Redis 以及 可视化工具Redis Desktop Manager的安装和使用
    使用@Param注解
    关于在方法里面使用泛型public static <T> T
  • 原文地址:https://www.cnblogs.com/2390624885a/p/6667716.html
Copyright © 2011-2022 走看看