信息学奥林匹克竞赛-统计最长天数
2015-10-27 16:05
253 查看
炎热的夏日,KC非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。
经历千辛万苦,他收集了连续N(1<=N<=10^7)天的最高气温数据。
现在,他想知道最高气温一直上升的最长连续天数。
输入格式:
第1行:一个整数N。1<=N<=10^7
第2行:N个空格隔开的整数,表示连续N天的最高气温。0<=最高气温<=10^9。
输出格式:
第1行:一个整数,表示最高气温一直上升的最长连续天数。
输入:
10
1 2 3 2 4 5 6 8 5 9
输出:
5
以上代码虽然易懂,但是有个很严重的超时问题,我们使用了二重循环,使得算法复杂度在O(n^2)。
以下算法将复杂度降到O(n)
经历千辛万苦,他收集了连续N(1<=N<=10^7)天的最高气温数据。
现在,他想知道最高气温一直上升的最长连续天数。
输入格式:
第1行:一个整数N。1<=N<=10^7
第2行:N个空格隔开的整数,表示连续N天的最高气温。0<=最高气温<=10^9。
输出格式:
第1行:一个整数,表示最高气温一直上升的最长连续天数。
输入:
10
1 2 3 2 4 5 6 8 5 9
输出:
5
var i,j,n,max,counter:longint; a:array[1..10000000] of longint; begin assign(input,'in.txt'); reset(input); readln(n); for i:=1 to n do read(a[i]); max:=0; for i:=1 to n do begin counter:=1; for j:=i to n do begin if a[j]>=a[j+1] then begin break; end else begin counter:=counter+1; end; end; if counter>max then max:=counter; end; writeln(max); end.
以上代码虽然易懂,但是有个很严重的超时问题,我们使用了二重循环,使得算法复杂度在O(n^2)。
以下算法将复杂度降到O(n)
var i,n,max,counter:longint; a:array[1..10000000] of longint; begin assign(input,'in.txt'); reset(input); readln(n); for i:=1 to n do read(a[i]); max:=0; counter:=1; for i:=1 to n do begin if a[i+1]>a[i] then begin counter:=counter+1; end else begin counter:=1; end; if counter>max then max:=counter; end; writeln(max); end.
相关文章推荐
- win命令行base64编码(系统自带 内网渗透必备哟)
- 如何在docker容器中运行一个程序
- linux 4000 操作命令
- GCT考试总结
- linux系统安装(二)-远程登录管理工具SecureCRT
- spring jdbc万能数据库封装类
- 仿qq记录历史账号
- 解决jenkins打包时不能及时更新到最新代码的问题
- HIVE数仓数据血缘分析工具-SQL解析
- Android开发,将图片(bitmap)变成圆形图片、图片文件变成bitmap的方法
- 微信网页授权获取code链接
- Android自动登录与记住密码
- MVC学习Day02之校验
- 041.extension 类的拓展
- 批处理bat schtasks 启动远程应用
- Java 枚举的详细说明
- Ugly Number
- CI 验证码辅助函数
- winscp中文乱码
- 在一个新建文件夹下初始化Git并下载代码的命令