Ich überprüft Fragen, die zu meinem Problem vor dem Posten dieser Frage, aber nichts nützliches finden konnte. Ich versuche, den Zusammenführungssortieralgorithmus zu ändern, um doppelte Einträge in einem Array von ganzen Zahlen zu löschen. Leider ist das einzige Ergebnis, das ich erhalten habe, ein geordnetes Array, in dem die doppelten Einträge durch Nullen ersetzt werden. HierMit merge sort, um doppelte Einträge im Array zu entfernen
public static int[] mergeSort(int[] array, int left, int right){
int[] sortedArray = null;
if(left == right){
sortedArray = new int[1];
sortedArray[0] = array[left];
return sortedArray;
}
int mid = (left+right)/2;
int[] subA = mergeSort(array, left, mid);
int[] subB = mergeSort(array, mid+1, right);
sortedArray = merge(subA, subB);
return sortedArray;
}
private static int[] merge(int[] subA, int[]subB){
int[] mergedArray = new int[subA.length+subB.length];
int i, j, k;
i = 0;
j = 0;
k = 0;
while(i < subA.length && j < subB.length){
if(subA[i] < subB[j]){
mergedArray[k] = subA[i];
i++;
}
else if(subA[i] > subB[j]){
mergedArray[k] = subB[j];
j++;
}
//if the two elements are equal
else{
mergedArray[k] = subA[i];
i++;
j++;
}
k++;
}
if(j >= subB.length){
while(i < subA.length){
mergedArray[k] = subA[i];
i++;
k++;
}
}
else{
while(j < subB.length){
mergedArray[k] = subB[j];
j++;
k++;
}
}
return mergedArray;
}
ist die Ausgabe des Codes oben:
Bin ich einige grundlegende Punkt fehlt? Gibt es eine effektive Möglichkeit, diesen Code zu modifizieren, um ein Array von einzigartigen Elementen ohne diese Null-Wiederholung zu erhalten?
Warum nicht einfach ein neues Array erstellen, in das Sie die 0-Werte nicht schreiben? Behalte einfach einen Zähler, wie viele einzigartige Elemente du erkennst, und dann wirst du auch wissen, wie groß dein neues Array am Ende sein muss. –
Ich dachte auch über so etwas nach, leider ist der Fall nicht ausgeschlossen, in dem eine oder mehrere Nullen Elemente des ursprünglichen Arrays sind, und es wäre unmöglich, die "richtigen" Nullen von den "falschen" zu unterscheiden. –
Aber du solltest sowieso nur eine Null behalten, oder? Was passiert also, wenn Sie nach dem Sortieren Inhalte in ein neues Array kopieren und nur ein if-Element kopieren, bevor es negativ oder border ist, und ein Element, nachdem es positiv oder border ist? Allerdings müssen Sie immer noch im Auge behalten, ob eine Null im ursprünglichen Array war oder nicht, aber das kann auch im ersten Durchgang geschehen. –