• 旋转数组的最小数字


     1 #include "stdafx.h"
     2 #include <iostream>
     3 #include <exception>
     4 #include <stack>
     5 using namespace std;
     6 
     7 /*
     8 旋转数组的最小数字
     9 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转,输入
    10 一个递增排序的数组的一个旋转。输出旋转数组的最小元素。例如数组{3,4,5,1,2}
    11 为{1,2,3,4,5}的一个旋转,该数组的最小值为1.
    12 思路:遍历一遍找最小值.时间复杂度显然是O(n),这个思路显然达不到要求.
    13 */
    14 
    15 int Min(int *arr,int beg,int end)
    16 {
    17     
    18     if(arr==NULL)
    19         throw new std::exception("Invalid parameters");
    20     if(arr[beg]<arr[end])
    21     {
    22         return arr[beg];
    23     }
    24 
    25     int mid =(beg+end)/2;
    26     if(arr[mid]==arr[beg]&&arr[beg]==arr[end])
    27     {
    28         int result = arr[beg];
    29         for(int i = beg;i<=end;i++)
    30         {
    31             if(result>arr[i])
    32                 result = arr[i];
    33         }
    34         return result;
    35     }
    36     if(beg+1==end)
    37     {
    38         return arr[end];
    39     }
    40     
    41     if(arr[mid] < arr[beg])
    42     {
    43         return Min(arr,beg,mid);
    44     }
    45     if(arr[mid] > arr[end])
    46     {
    47         return Min(arr,mid,end);
    48     }
    49     return -1;
    50 }
    51 
    52 int _tmain(int argc, _TCHAR* argv[])
    53 { 
    54     int arrlist[] = {2,3,4,5,6,7,1};
    55     //int arrlist[] = {1,0,1,1,1};
    56     //int arrlist[] = {1,1,1,0,1};
    57     int len = sizeof(arrlist)/sizeof(int);
    58     cout<<Min(arrlist,0,len-1)<<endl;
    59     return 0 ;
    60 }
  • 相关阅读:
    解决SecureCRT连接linux终端中文显示乱码
    处理二维数组两题
    struts2校验总结
    专题:分治法
    常用表格编写
    写Action的三种方法
    Struts2入门-十分简单的登陆
    汉诺塔动画
    记录一下字符串处理的问题
    记录一些指针的应用方法
  • 原文地址:https://www.cnblogs.com/crazycodehzp/p/3558658.html
Copyright © 2020-2023  润新知