ich versuchte UVa Problem Nummer 10324 und ich codiert die folgende Lösung dieses ein System angenommen wird, sondern gibt eine wirklich schlechte Laufzeit von 2,670 Sekunden Ich habe die beiden folgenden Codes Dies ist mein CodeGeschwindigkeit in Java, warum einige Codes schneller laufen
public static void main(String[] args) throws Exception{
// write your code here
StringBuilder op = new StringBuilder();
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(isr);
String input, tmp[];
int n, l, u, j, i = 0;
boolean dec;
char thi;
while ((input = reader.readLine()) != null) {
op.append("Case " + (++i) + ":\n");
n = Integer.parseInt(reader.readLine());
while (n-- > 0) {
tmp = reader.readLine().split(" ");
l = Integer.parseInt(tmp[0]);
u = Integer.parseInt(tmp[1]);
if (l > u) {
l ^= u;
u ^= l;
l ^= u;
}
//System.out.println(l + "|" + u);
dec = true;
thi = input.charAt(l++);
for (; l <= u; l++) {
if (thi != input.charAt(l)||(thi != input.charAt(u--))) {
dec = false;
break;
}
}
op.append((dec ? "Yes\n" : "No\n"));
}
}
System.out.print(op.toString());
return;
}
}
und der andere Code ist ein ich die Mr Gorgon's Solution gefunden Dies hat eine Laufzeit von 0,84 Sekunden
aus 210public static void main(String[] args) throws Exception {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
StringBuilder sb = new StringBuilder("");
int testCase = 1;
String line;
while ((line = br.readLine()) != null) {
sb.append("Case ").append(testCase).append(":\n");
testCase++;
int noOfCases = Integer.parseInt(br.readLine());
for (int j = 0; j < noOfCases; j++) {
String[] str = br.readLine().split(" ");
int val1 = Integer.parseInt(str[0]);
int val2 = Integer.parseInt(str[1]);
if (val1 > val2) {
val1 ^= val2;
val2 ^= val1;
val1 ^= val2;
}
boolean isValid = true;
if (val1 != val2) {
for (int i = val1; i < val2; i++) {
if (line.charAt(i) != line.charAt(i + 1)) {
isValid = false;
break;
}
}
}
if (isValid)
sb.append("Yes\n");
else
sb.append("No\n");
}
}
System.out.print(sb);
}
Ich fand es sehr schwer zu verstehen, warum dieser Code so viel schneller läuft, wenn alle Aufgaben im Wesentlichen same.and mein Code hat weniger Erklärungen als Gorgons Code
deklaratio ns bringt nicht wirklich viel Performance-Overhead in der Tat (und ich sehe nicht, Sie haben wirklich keine Erklärung kleiner ...) –
Ich habe einige Testfälle mit mehreren wirklich langen Strings und vielen kürzeren erstellt und die zwei Versionen lokal ausgeführt (Windows und Linux, jdk8), und deine Version ist etwa 2 mal schneller. Es wäre interessant, die tatsächlichen Testfälle (UVa) und die Java-Laufzeit zu kennen, die sie verwenden. – starikoff