我正在嘗試解決UVa problem 458 - decoder,並提出了以下算法,它爲我提供了正確的輸出樣本輸入數據,但運行時間超出了允許的範圍。UVa在線裁判#458超出時間限制
public class Decoder {
public void decoder() {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String line = sc.nextLine();
for (int i = 0; i < line.length(); i++) {
if(line.charAt(i)>=32 && line.charAt(i)<=126)
System.out.print((char) (line.charAt(i) - 7));
}
System.out.println();
}
}
}
我已經看了什麼爲
嗯,我已經閱讀了forums和大多數解決方案都非常相似,如果有避免爲一種方法,我一直在研究循環正在貫穿字符串並打印出新字符。但是這個循環是不可避免的,這個算法的時間複雜度總是會是n^2。
該問題還提到只更改ASCII可打印值,這就是爲什麼我設置條件來檢查它是否大於或等於32和126.根據Wikipedia這是可打印值的範圍。
也許處理整行,然後纔打印它將比單獨解碼和打印每個字符更快。 – Artyom
你確定你正在生成正確的輸出 - 這就是你的程序失敗的原因,對吧?我要問的原因是,您不僅限制將更改值更改爲ASCII可打印字符,而且還會將*打印*限制爲ASCII可打印字符,減去7.應該先減去,然後打印,如果結果在正確範圍內? – Patrick87
@ Patrick87它超過了時間限制的答案是正確的 –