最长平台问题
来源:互联网 发布:巨人网络2017业绩 编辑:程序博客网 时间:2024/04/27 19:01
该问题出自《C语言名题精选百则技巧篇》。大意是:找出一段有序数字中,找出最长而且连续的数字。比如在1,2,2,3,3,3,4,5,5,6中最长平台即为3,长度也是3。
我的代码如下:
#include <stdio.h>#include <conio.h>int main(){int i=0,L=0;int result;int x[]={1,2,2,3,3,3,4,5,5,5,5,6}; //in orderresult=x[0];int size=sizeof(x)/sizeof(int); //the number of the integer arrayfor(i=0;i+L<size;i++){for(;;L++){if(x[i]==x[i+L])result=i;elsebreak;}}printf("%d",x[result]);getch();}
我的想法非常朴素:从第一个数开始,L初始为0,遍历寻找第一个数的长度。例子中第一个数长度为1,进入第二个数,得L=2。以此类推,在O(n2)的时间复杂度内得到结果。
但是书上的算法代码更少,时间复杂度却更低。
书中代码如下:
#include <stdio.h>#include <conio.h>int main(){int x[]={1,2,2,3,3,3,4,5,5,6}; //in orderint size=sizeof(x)/sizeof(int);int result=0;int L=1;for(int i=1;i<size;i++){if(x[i]==x[i-L]){result=i;L++;}}printf("%d: length:%d",x[result],L);getch();}
这样就可以每个元素只比较一次,不用像我的算法一样来回比较,也凭借着L避免了很多不必要的比较,效率非常高,时间复杂度为O(n)。
总结:算法的学习,思考是关键。
参考文献:《C语言名题精选百则:技巧篇》 D.Gries.The Science of Programming,Springer-Verlag,1981
- 最长平台问题
- 最长平台问题
- 最长平台问题
- 最长平台问题
- 1.最长平台问题
- 问题1:最长平台问题
- 最长平台问题 C实现
- C/C++ 最长平台问题 算法
- 每日一小练——最长平台问题
- 最长平台
- 最长平台
- 最长平台
- 最长平台问题------2012年12月24日
- 【串和序列处理 8】最长平台问题
- MaxSection 最长平台
- hdoj1004(寻找最长平台)
- plateau.cpp最长平台
- plateau最长平台
- Android课程表
- MPlayer-1.0rc2的配置选项
- struts2和freemarker生成静态页面
- oracle自增字段
- oracle 性能调优诊断案例1
- 最长平台问题
- 谈魔兽世界服务器和客户端交互的架构
- POJ 3176 Cow Bowling
- DIV-CSS 之 让 DIV 居中显示
- 老子的软件之道 - 道篇 28 大制不割
- 面试信息获取_1——进程与线程的区别
- dd命令
- 老子的软件之道 - 道篇 29 过犹不及
- oracle性能调优-sql trace工具