以下仅仅是我刷牛客题时,根据排行榜大佬的一些代码对自身代码做出的修正,如果有误,欢迎指出与补充~
1. 字符串转整数
- 结论:使用
Integer.valueOf("numStr")
的效率会略略高于Integer.parseInt("numStr")
- 原因:
Integer.valueOf()
会使用到Cache缓存,其效率可能会比Integer.parseInt()
略高一些,Integer.valueOf()
返回的是基本数据类型int,Integer.parseInt()
返回的是Integer包装类型,拆箱装箱也会有性能的损耗,因此可以根据自身情况进行选择。 - 参考:https://blog.csdn.net/jdsjlzx/article/details/106352216
2. 获取输入
- 结论:在牛客中,使用IO流的形式效率远高于Scanner类,前者高效,后者方便获取用户输入
- 使用:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); br.close();
- 原因:
BufferedReader
是从字符输入流中入去文本,提供了缓冲区缓冲各个字符,从而提供字符、数组和行的高效读取。 - 参考:https://blog.csdn.net/qq_20032995/article/details/55803287
3. foreach循环
- 结论:在数据量小的情况下,能使用
Iterator
的就不要使用 .forEach(lambda) 的这个方法;在数据量大的情况下,lambda parallelStream().forEach() > lambda stream().forEach() ≈ lambda forEach() > classical iterator ≈ classical forEach > classical for。不过牛客中的算法题一般数据量都不大,用迭代器就可以了。 - 参考:https://blog.csdn.net/qq_34287953/article/details/115723448
4. 进制转换
- 16进制转10进制:0x2C3 = 2*16² + C*161 + 3*160
= 2*16² + 12*161 + 3*160
= 707 - 10进制转2进制:例 13转2进制
13 / 2 = 6···1
6 / 2 = 3···0
3 / 2 = 1···1
1
自下往上将余数合并:13的二进制为1101
暂时就这么多 有新体会再进行补充~