ich ein Problem zu lösen versuche:Gruppierung Numbers JS Algorithmus
Problem:
eine Reihe von positiven wiederholenden Zahlen gegeben. Ausgabe sollte ein Array mit einer Quote auf der rechten Seite geben sortiert und nivelliert auf dem links (ohne besondere Reihenfolge)
Input: [4,1,2,3,4]
Output: [4,2 , 3,1]
Löst es in-place und ohne zusätzlichen Raum und O (N) Laufzeit.
Code:
/*
* Algorithm is simple, have two pointers one on the left and another on the right.
* Note: We are sorting all evens on the left and odds on the right
* If you see even on left, move on else swap.
*/
function groupNumbers(intArr) {
if(intArr.length == 0 || intArr.length == 1){
return intArr;
}
for(let i=0, j =intArr.length-1; i<intArr.length; i++){
if(j>=i){ //elements should not overlap
let start = intArr[i];
let end = intArr[j];
if(start%2 == 0){ //Even
i++;
} else {
[start, end] = [end, start]; //swap
}
if(end%2 == 1){
j--;
} else {
[start, end] = [end, start]; //swap
}
} //if-ends
}//for-ends
return intArr;
}
Ich bin mir nicht sicher, wo ich falsch gehe. Ich vermisse etwas. Ich bekomme das gleiche sortierte Array wie die Ausgabe.
Zustand: ** LÖSEN es INPLACE und ohne zusätzlichen Raum mit ** (vorzugsweise in einer Iteration)
Zwar ist dies eine völlig ist legitime Frage, sollte diese Art von Sache j über * nie * in JavaScript. 'Array.prototype.sort' ist in C++ implementiert und wird fast sicher schneller sein, selbst wenn eine benutzerdefinierte Sortierfunktion übergeben wird, als alles, was Sie schreiben. –
kannst du bitte erklären .. warum? Wenn ich nichts sortiere, sondern nur zwei Zeiger verwende, um Dinge auszutauschen. @JaredSmith bitte erleuchte mich in diesem Fall. Ich möchte mehr erfahren – TechnoCorner
Es gibt viele Sprachen, die "Scripting" -Sprachen genannt werden, aber JavaScript ist wirklich * eins: es soll eine Host-Umgebung skripten. Daher ist der Aufwand für die Ausführung von JavaScript sehr hoch, auch wenn es wie C aussieht: es gibt Begrenzungen, primitives Boxen/Unboxing, Schnittstellen zur Laufzeit usw. Und das mutieren des Arrays kann in manchen Fällen * langsamer * als sein eine neue erstellen, weil sie die "Form" wiederholt ändern kann, was zu einer Menge Speicherzuweisungen führt, statt möglicherweise nur einer, um das neue Array zu halten. Dann kommst du in Größenprobleme: für Arrays der Länge n solltest du ... –