我試圖解決這個problem下面Java代碼:我可以做些什麼來提高Java代碼的性能?
Scanner scanner = new Scanner(System.in);
int testNum = scanner.nextInt();
StringBuilder sb = new StringBuilder();
double x;
double y;
int year;
for(int i = 0; i < testNum; i++) {
x = scanner.nextDouble();
y = scanner.nextDouble();
year = (int)((x * x + y * y) * Math.PI/100);
sb.append("Property ").append(i+1).append(": This property will begin eroding in year ");
if(year * 100/Math.PI < x * x + y * y)
sb.append(year+1);
else
sb.append(year);
System.out.println(sb.append('.'));
sb.delete(0, sb.length());
}
System.out.println("END OF OUTPUT.");
在判斷我的節目,我覺得它的成本3164K內存和125MS的時間,同時也有許多其他的用戶,其提交被接受,而且只花了約92K內存和15MS時間。這比我的結果好得多,那麼有沒有更好的方法來解決這個問題?
我認爲for循環是處理器上最難的。不知道它是否會做任何事情,但也許它成爲一個while循環? 'while(scanner.hasNext())'也許? –
我認爲他們做一些形式的IO優化,這是不值得你的時間。您可能想嘗試不使用掃描儀,但可以使用BufferReader + StringTokenizer + Double.parseDouble()。你也可以嘗試讀取輸入到char []並進行解析,並通過在char []上進行工作來打印整數。但我保證,你花時間進行這種優化並不會幫助你在競爭性節目中獲得更好的表現。 – nhahtdh
你的if語句似乎在檢查'(x * x + y * y)>(x * x + y * y)'。去掉它?另外,使用StringBuilder附加並不斷清除它,或者爲每次迭代重新分配一個字符串的值會更快嗎? – acattle