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

  • 相关阅读:
    51nod 1621 花钱买车牌 优先队列
    最大字段和 51nod 1049 水水水水水水水水水水水水
    大数相乘 51nod 1027 水题
    逆序数 51nod 1019 归并 分治
    最长公共子序列 LCS 递归 dp 51Nod 1006
    vc6 字体设置
    自行车维护大全(zz)
    DirectX 9.0 3D游戏开发编程基础 [书评](zz)
    二维线段树
    latex 引用文献 bib
  • 原文地址:https://www.cnblogs.com/huoyao/p/4248915.html
Copyright © 2011-2022 走看看