java刷OJ超時解決過程

刷pat,數據超過1000,最後一個測試點一定會超時,因爲Scanner太慢了,要命

1.首先我先試了   system.in改成   BufferedInputStream(System.in));

Scanner input = new Scanner (new BufferedInputStream(System.in));

一點用沒有,別試!!!!!

2.我看知乎有人說用拋出的形式,如下

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
try {

		s = in.readLine();	
			
		} catch (IOException e) {
			e.printStackTrace();
		}

流的形式輸入,這是官方解法。可是,因爲各種原因我沒成功AC過,但我覺得可能是可以的,因爲好多人說快了不少。。。

3.如果用2的方法,要考慮readLine()是輸入一行,如果要讀取數據還要把它們一個個分開,我日

解決辦法是用split()(這個是我猜的,不知道工作效率如何),然後用Integer把String轉成int,各種類型轉換就自己想辦法吧

4.但是,還有一個比較坑的地方是,如果用3的方法,如果前面有輸入整形數據的話

int n=input.nextInt();
String s=input.nextLine();

上面這樣是無法繼續輸入s的,原因我不知道,解決方法如下

String q = input.nextLine();
int n = Integer.parseInt(q);
String s=input.nextLine();

以上是我最近踩的坑,超過1000個數據,java基本不能拿滿分,拜祖師爺也不行,暴力出奇跡就是個童話。java單線程不適合刷競賽類的題,血的教訓。但Leetcode對java的支持非常友好,暴力法能解非常多的題。

選C++了,因爲還是java比較順手,所以決定先用java寫思路,然後改成C++。C++真香(doge

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章