【剑指offer】旋转数组的最小值

    xiaoxiao2021-03-25  68

     现在对算法真的是由衷地热爱啊,总是忍不住想要A题(本科都没这意识,哎,把时间都浪费在了考试拿奖学金和所谓的学生工作上了),而且数学一直以来都是自己的强项,希望在这方面以后能应用好,虽然在ACM方面还只是个小学生,以后即使工作了,也要把ACM坚持下去,无关乎工作,只关乎兴趣。

        

        依然是剑指offer上的题目,第8题,在九度OJ上测试通过。

    时间限制:1 秒

    内存限制:32 兆

    题目描述:

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

    输入:

    输入可能包含多个测试样例,对于每个测试案例,

    输入的第一行为一个整数n(1<= n<=1000000):代表旋转数组的元素个数。

    输入的第二行包括n个整数,其中每个整数a的范围是(1<=a<=10000000)。

    输出:

    对应每个测试案例,

    输出旋转数组中最小的元素。

    样例输入: 53 4 5 1 2 样例输出: 1     采用二分查找的策略,重点要考虑一些边界情况:旋转了0元素,即输入的是一个升序排列的数组、只包含一个数字的数组、有 很多重复数字的数组等。

        AC代码:

    [cpp]  view plain  copy   #include<stdio.h>   #include<stdlib.h>      int main()   {       int n;       while(scanf("%d",&n) != EOF)       {           int *A = (int *)malloc(n*sizeof(int));           if(A == NULL)               exit(EXIT_FAILURE);           int i;           for(i=0;i<n;i++)               scanf("%d",A+i);              int p1 = 0;           int p2 = n-1;           int mid = p1;           while(A[p1] >= A[p2])           {               if(p2-p1 == 1)               {                   mid = p2;                   break;               }               mid = (p1+p2)/2;               //特殊情况,只能顺序查找               if(A[p1]==A[mid] && A[p2]==A[mid])               {                   mid = p1;                   int i;                   for(i=p1+1;i<=p2;i++)                   {                       if(A[mid] > A[i])                           mid = i;                   }                   break;               }               if(A[mid]>=A[p1])                   p1 = mid;               else if(A[mid]<=A[p2])                   p2 = mid;           }           printf("%d\n",A[mid]);           free(A);           A = 0;       }       return 0;   }   /**************************************************************      Problem: 1386      User: mmc_maodun      Language: C      Result: Accepted      Time:700 ms      Memory:4820 kb ****************************************************************/

    转载请注明原文地址: https://ju.6miu.com/read-33576.html

    最新回复(0)