• 《剑指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的9个地方调用了5次后置处理器的详细情况
    spring容器启动
    什么是好的代码
    随机文件读写
    mysql 写锁
    mysql 高效率查询背景
    spring中的重点
    spring bean生命周期和上下文初始化
    雷电模拟器 v3.71绿色版
    免费申请 QQ 免费靓号
  • 原文地址:https://www.cnblogs.com/CnZyy/p/3311067.html
Copyright © 2020-2023  润新知