一、背景介绍
最近在牛客、leetcode 刷算法题时发现一个奇怪的问题,明明解题思路、所用算法与题解一致,并且在本地IDE运行是通过的,但是在牛客、leetcode 却没办法AC,出现一个叫做 运行超时 的异常。通过查阅资料、反复验证之后,找出了一个有效的解决办法。
二、解决办法
2.1 C/C++ 语言
针对使用 C/C++ 语言刷算法题遇到 运行超时异常 问题的同学,可以将输入/输出 换成 scanf/printf,此时极大概率就能通过
2.2 Java 语言
针对使用 Java 语言刷算法题时遇到 运行超时异常 问题的同学,就比较麻烦了,需要速记牢背一个 Java快速 IO 的模板,牢记这个模板之前我们需要先了解牛客、leetcode 在刷算法题时给我们提供的 ACM模式进行编程时(一般会给出两种模式进行编写代码,1、核心代码模式,即给出一个函数/方法,在此函数里书写题目的解决逻辑即可。2、ACM模式:给出Main类、main方法,其他没给出,需要书写解题时需用到的全部代码,包括引入的包名,都需要自己手动书写。一般工作时笔试中,做编程题时,给出的都是ACM模式),其进行I/O的流程。
2.2.1 ACM模式下 Java的I/O原理
对于 ACM模式 下,Java 进行 I/O的流程:
输入情况下(Java 使用 new Scanner(System.in) 进行输入数据):
输出情况下(Java 使用 System.out 进行输出数据):
从上述ACM模式下进行输入输出的原理图中,我们就能清楚知道使用 Java 自带的 Scanner / System.out 进行输入输出时,每次 输入/输出 都需要访问I/O设备,但访问一次I/O设备又是很慢的,因此代码量庞大的情况下,就会出现 运行超时异常问题。
Java 快速 I/O 模板:
import java.util.*;
import java.io.*;
public class Main
{
public static PrintWriter out = new PrintWriter(new BufferedWriter