zoukankan      html  css  js  c++  java
  • 【剑指Offer面试编程题】题目1386:旋转数组的最小数字--九度OJ

    题目描述:

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

    输入:

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

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

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

    输出:

    对应每个测试案例,

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

    样例输入:

    	5
    	3 4 5 1 2

    样例输出:

    1

    【解题思路】本题可以采用投机取巧的方法来完成,由于所有输入数据都必须要读入,题目的旋转数组的最小元素即可以看做从所有输入元素中寻找最小元素。这样的话,我们可以再输入元素的同时确定最小元素,如果当前输入元素比目标元素小,更新目标元素为当前输入值,继续输入。输入完成后,最小元素的值将保存在目标元素里面。

    当然,本题的初衷不是这样的。本题的输入应该是第一个递增序列加上第二递增序列,而最小的元素即第二个递增序列的头元素。所以寻找到第二个递增序列的头元素即可解答该题。第二个递增序列的头元素也很好找,当发现当前输入的元素比之前的元素小时,该元素即为所找元素。

    AC code:

    #include <cstdio>
    using namespace std;
     
    int main()
    {
      int n,tt,recod=10000002;
      while(scanf("%d",&n)!=EOF)
      {
        recod=10000002;
        for(int i=0;i<n;++i)
        {
          scanf("%d",&tt);
          if(tt<recod)
            recod=tt;
        }
        printf("%d
    ",recod);
      }
      return 0;
    }
    /**************************************************************
        Problem: 1386
        User: huo_yao
        Language: C++
        Result: Accepted
        Time:650 ms
        Memory:1020 kb
    ****************************************************************/
    题目链接:http://ac.jobdu.com/problem.php?pid=1386

  • 相关阅读:
    选择高性能NoSQL数据库的5个步骤
    如何将 Redis 用于微服务通信的事件存储
    让你的AI模型尽可能的靠近数据源
    Collections.sort 给集合排序
    Bootstrap 文件上传插件File Input的使用
    select2 api参数的文档
    textarea 标签换行及靠左
    JSON
    JDK的get请求方式
    通讯录作业
  • 原文地址:https://www.cnblogs.com/huoyao/p/4248915.html
Copyright © 2011-2022 走看看