2015-11-18 143 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

谢谢。那么你将如何改进呢? –