2015-11-18 141 views
-1

我想知道是否有方法來提高以下代碼的效率。 (或者,也許有更好的算法?)
提高Java代碼的效率

Scanner sc = new Scanner(System.in); 
int t = sc.nextInt(); 
for (int i = 0; i < t; i++){ 
    int m = sc.nextInt(), n = sc.nextInt(), maxM = 0, maxN = 0; 
    for (int j = 0; j < m; j++){ 
    int newMonster = sc.nextInt(); 
    if (newMonster > maxM){ 
     maxM = newMonster; 
    } 
    } 
    for (int j = 0; j < n; j++){ 
    int newMonster = sc.nextInt(); 
    if (newMonster > maxN){ 
     maxN = newMonster; 
    } 
    } 
    System.out.println(maxM >= maxN? "Godzilla": "MechaGodzilla"); 
} 

基本上,我在一堆數字閱讀,並希望找到最大。有關原始問題的更多詳細說明,請轉至
https://open.kattis.com/problems/armystrengthhard/
當前代碼需要超過1秒才能完成運行,但我不確定哪部分(讀取輸入或比較數字)需要更多時間。

+0

需要用什麼輸入才能完成?你的鏈接或更大的鏈接的小樣本?要確定比較數字是否確實會影響性能,只需從2個循環中刪除2個ifs,看看它是否會改變處理時間。 – StephaneM

+0

對不起,我不知道輸入。我只是提交給網上法官。前兩個測試用例非常小,所以我通過了它們。但我在第三個失敗了。因此,刪除if語句不會測試性能,因爲它不會通過前兩個小測試用例。 –

+0

你可以通過一件事來提高性能:不要在你的循環中聲明任何變量。讀取你的鏈接可以有50 * 2 * 100000 = 10百萬整數讀取。你可以使用相同的變量而不是分配10百萬個int。 – StephaneM

回答

1

我會用一個CPU分析器制定出它爲什麼花那麼多的CPU,但它極有可能你的程序花費大部分的時間裏進行的IO操作,即sc.nextInt()System.out.println

每個IO操作爲1K到比任何其他操作貴10K倍。

+0

謝謝。那麼你將如何改進呢? –