Ich muss dieses Array in O (n) time und O (1) space sortieren.Sortiere ein Array, dessen Elemente von 1 bis n reichen, wobei ein Element fehlt und eines wiederholt wird
Ich weiß, wie man ein Array in O (n) sortiert, aber das funktioniert nicht mit fehlenden und wiederholten Zahlen. Wenn ich die wiederholten und fehlenden Zahlen zuerst finde (es kann in O (n) gemacht werden) und dann sortieren, erscheint das teuer.
static void sort(int[] arr)
{
for(int i=0;i<arr.length;i++)
{
if(i>=arr.length)
break;
if(arr[i]-1 == i)
continue;
else
{
while(arr[i]-1 != i)
{
int temp = arr[arr[i]-1];
arr[arr[i]-1] = arr[i];
arr[i] = temp;
}
}
}
}
Versuchen Sie die fehlende Zahl oder die wiederholte Zahl finden. Sobald Sie das getan haben, können Sie das Array leicht sortieren. Es gibt O (n) -Methoden, um ein Duplikat in einem Array zu finden. –
Ja, ich weiß das, aber können wir es nicht in einem Durchlauf tun, ohne diese Elemente zu finden? –
Ja, das Finden der fehlenden und der wiederholten Elemente in O (n) ist genau das Problem, das Sie lösen müssen. Vielleicht, wenn Sie herausfinden können, welche der beiden größer ist, wird es ein bisschen einfacher, sie zu finden. –