zoukankan      html  css  js  c++  java
  • 《剑指offer》面试题8—旋转数组的最小数字

    题目:把一个数组最开始的若干个元素搬到数组末尾我们称之为数组的旋转。要求:输入一个递增排序的数组的旋转,输出旋转数组中的最小数字。例如{3,4,5,1,2}是{1,2,3,4,5}的一个旋转,该数组的最小值为1。

    思路:旋转后的数组可分为两个有序数组,最小的数恰好是分界点。由于是局部有序的,想到用二分查找的方法去查找最小元素。和二分类似,每次取一个index_mid为中间值,如果该数大于index1则说明最小数在后面;如果该数小于index2,则说明最小数在该数前面或者就是该数。

    例外情况:1.旋转了0个数,即数组仍是有序的;2.mid=index1=index2,此时必须暴力求解。

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 int MinInOrder(int* array, int index1, int index2)
     6 {
     7     int min = array[index1];
     8     for(int i=index1+1; i<=index2; i++)
     9     {
    10         if(array[i] < min) min = array[i];
    11     }
    12     return min;
    13 }
    14 
    15 int Min(int* array, int length)
    16 {
    17     int index1 = 0;
    18     int index2 = length - 1;
    19     int index_mid = index1;
    20 
    21     if(array[index1] < array[index2])
    22         return array[index1];
    23     else
    24     {
    25         while((index2 - index1) > 1)
    26         {
    27             index_mid = (index2 + index1)/2;
    28             if(array[index1] == array[index2] == array[index_mid])
    29                 return MinInOrder(array,index1,index2);
    30             else if(array[index1] <= array[index_mid])
    31                 index1 = index_mid;
    32             else
    33                 index2 = index_mid;
    34         }
    35     }
    36     return (array[index1]<array[index2])?array[index1]:array[index2];
    37 }
    38 
    39 
    40 int main()
    41 {
    42     int length;
    43     cout<<"Input the array's length:"<<endl;
    44     cin>>length;
    45     int* parray = new int[length];
    46     for(int i=0; i<length; i++)
    47     {
    48         cin>>parray[i];
    49     }
    50     cout<<"The min number in array:"<<Min(parray,length)<<endl;
    51     return 0;
    52 }
    View Code
  • 相关阅读:
    Spring AOP 注解开发
    AOP的专业术语
    Java自定义注解的实现和应用
    Spring 声明式事务管理
    另一种线程安全机制:在事务管理中起到巨大作用的 ThreadLocal
    MySQL的二级索引
    数据库的范式化和反范式化
    MySQL为表字段添加索引
    mysql索引(二)----如何高效使用索引
    Alexnet网络
  • 原文地址:https://www.cnblogs.com/CnZyy/p/3311067.html
Copyright © 2011-2022 走看看