Ho riscontrato una domanda su hackerrank. https://www.hackerrank.com/challenges/countingsort4modi per accelerare il conteggio completo Ordina
Il mio primo tentativo ha superato tutti i casi di test tranne l'ultimo, a causa del timeout. Dopo aver fallito con un algoritmo più efficiente, ho migliorato il codice usando StringBuilder invece di concatenare direttamente le stringhe. Ciò ha portato il tempo di esecuzione da più di 5 secondi a 3,5 secondi.
La mia domanda è che c'è un altro modo in cui posso migliorare il tempo di esecuzione? Grazie.
Quanto segue è il mio codice.
public class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
scanner.nextLine();
int[] oriNum = new int[N];
String[] oriStr = new String[N];
int[] count = new int[100];
int[] indices = new int[100];
int[] output = new int[N];
// save the originals and the count array
for (int i = 0; i < N; i++) {
oriNum[i] = scanner.nextInt();
oriStr[i] = scanner.nextLine().trim();
count[oriNum[i]]++;
}
// accumulate the count array
indices[0] = 0;
for (int i = 1; i < 100; i++) {
indices[i] = indices[i-1] + count[i-1];
}
// output order
for (int i = 0; i < N; i++) {
int num = oriNum[i];
output[indices[num]++] = i;
}
int bar = N/2;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
int index = output[i];
if (index < bar)
sb.append("- ");
else
sb.append(oriStr[index]+ " ");
}
System.out.println(sb.toString());
}
}
Invece di sb.append (oriStr [indice] + ""); usa sb.append (oriStr [index]). append (""); – StanislavL
Questa domanda sembra essere off-topic perché richiede la revisione del codice e come tale appartiene al Code Review SE. –