• 1.最长平台


      问题:已知一个从小到大的有序数组,这个数组中一个平台就是连续的一串

    值相同的数,并且不可再延伸。请找出最长的平台。例如:1,2,2,3,3,3,3,4,5,5,6中

    1,2,3,4,5,6各自是一个平台,找出连续最长的。

      先上python,本人思考问题后总是先用python实现,然后再转成c或者c++,

    难道python实现起来容易?我感觉有点。

    plateau.py :

     1 def num(a):
     2     t=a[0]
     3     c=0
     4     b=0
     5     tmp=0
     6     for i in a:
     7         if t==i:
     8             c+=1
     9         else:           
    10             if b<c:
    11                 tmp=t
    12                 b=c
    13             t=i
    14             c=1
    15     if b<c:
    16             tmp=a[len(a)-1]
    17             #b=c
    18     return tmp
    19 if __name__=='__main__':
    20     a=[1,1,1,1,1,1,1,1,1,2,2,3,3,3,\
    21        3,4,5,5,5,6,6,6,6,6,6,7,7,8,8,8,8,8,8,8,8,8,8]
    22     print num(a)

    c语言实现,plateau.c:

     1 #include <stdio.h>
     2 int num(int *a,int len)
     3 {
     4     int t=a[0];
     5     int c=0,b=0,tmp=0;
     6     for (int i =0;i<len;i++)
     7     {
     8         if(t==a[i])
     9             c++;
    10         else{
    11             if(b<c){
    12                 tmp=t;
    13                 b=c;
    14             }
    15             t=a[i];
    16             c=1;
    17 
    18         }
    19     }
    20     if(b<c)
    21         tmp=a[len-1];
    22     return tmp;
    23 }
    24 int main()
    25 {
    26     int arr[]={1,1,1,1,1,1,1,1,1,2,2,3,3,3,3,4,5,5,5,6,6,6,6,6,6,7,7,8,8,8,8,8,8,8,8,8,8};
    27     int tmp=num(arr,37);
    28     printf("%d\n", tmp);
    29     return 0;
    30 }

    程序跑起来后,感兴趣看看python程序与c的时间比较:

     1 $ time python plateau.py
     2 8
     3 
     4 real    0m0.144s
     5 user    0m0.015s
     6 sys     0m0.109s
     7 
     8 
     9 $ time ./plateau    //gcc -o plateau plateau.c
    10 8
    11 
    12 real    0m0.046s
    13 user    0m0.000s
    14 sys     0m0.030s

      主要看红色两行与绿色两行分别相加的结果来比较,C程序可不是一般的快。

    至于real时间主要是操作系统中存在中断,导致同一个程序运行时间差异可能也很大,

    所以用real比较不太准确,上面的时间计算相对精确些。最近看算法,记录记录,要的要的。

      但是上面的程序效率不高,但是优点是能够很容易的知道哪个数连续最长。下面介绍一个

    非常高效的计算出最长数连续多长,但是是哪个数最长,不好解决。主要思想是如果一个数n连续的

    长度L,那么下一个比n长就自加L,否则L不变,继续下一个数。

    simple.c :

     1 #include <stdio.h>
     2 int num(int *a,int length)
     3 {
     4     int len=1;
     5     int i;
     6     for(i=1;i<length;i++)
     7         if(a[i]==a[i-len])
     8             len++;
     9     return len;
    10 }
    11 int main()
    12 {
    13     int arr[]={1,1,1,1,1,1,1,1,1,2,2,3,3,3,3,4,5,5,5,6,6,6,6,6,6,7,7,8,8,8,8,8,8,8,8,8,8};
    14     int tmp=num(arr,37);
    15     printf("%d\n", tmp);
    16     return 0;
    17 }
  • 相关阅读:
    2017-2018-1 20155208 20155212 20155239 实验一 开发环境的熟悉
    2017-2018-1 20155332实验三 实时系统报告
    2017-2018-1 20155332 《信息安全系统设计基础》第九周学习总结
    第9周 实现PWD命令
    2016-2017第一学期 20155332 第八周课堂实践
    2017-2018-1 20155312 《信息安全系统设计基础》第八周学习总结
    20155332实验二 固件编程
    2017-2018-1 20155332 《信息安全系统设计基础》第7周学习总结
    20155332口令破解实验
    2017-2018-1 20155332 《信息安全系统设计基础》第六周学习总结
  • 原文地址:https://www.cnblogs.com/wuchaofan/p/3127682.html
Copyright © 2020-2023  润新知