题目描述
炎热的夏日,KC 非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。
经历千辛万苦,他收集了连续 N(1 ≤ N≤ 10^6) 的最高气温数据。
现在,他想知道最高气温一直上升的最长连续天数。
输入格式
第 1 行:一个整数 N 。1≤N≤10^6
第 2 行:N个空格隔开的整数,表示连续 N 天的最高气温。0 ≤ 最高气温 ≤10^9。
输出格式
1 行:一个整数,表示最高气温一直上升的最长连续天数。
输入输出样例
输入 #1
1 | 10 |
输出 #1
1 | 5 |
分析
使用数组存储气温数据,提交后有5组测试点 Memory Limit Exceeded.
使用变量a,b不使用数组存储,提交后依然是 Memory Limit Exceeded.
查询题解,发现不应该用Scanner,应该用流,效率更高
使用StreamTokenizer
1
2
3StreamTokenizer sc = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
sc.nextToken();//nextToken方法读取下一个Token.
int n = (int) sc.nval;StreamTokenizer可以获取输入流并将其分析为Token, Streamtokenizer按字符来读取字符流。每个字符流可以有零个或多个:空白字符、字母、数字、字符串引用或注释符号。
- 使用BufferedReader
1
2BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
reader.readLine();//读入N,并不使用,下面使用temp.length代替
- 使用BufferedReader
Reader和Scanner总结
- Java.util.Scanner类是一个简单的文本扫描类,它可以解析基本数据类型和字符串。它本质上是使用正则表达式去读取不同的数据类型
- Java.io.BufferedReader类为了能够高效的读取字符序列,从字符输入流和字符缓冲区读取文本。
- BufferedReader是支持同步的,而Scanner不支持。BufferedReader的read函数都加了synchronized关键字
- BufferedReader的缓冲区大小为8KB,Scanner的缓冲区大小为1KB
- BufferedReader相对于Scanner来说要快一点,因为Scanner对输入数据进行正则解析,而BufferedReader只是简单地读取字符序列
AC代码
1 | import java.io.BufferedReader; |