Das Zweisummenproblem ist ein klassisches algorithmisches Problem. Sie werden aufgefordert, zwei Zahlen in einem Array zu finden, die sich zu einem bestimmten *Ziel * addieren, das bereitgestellt wird, und dann ihre Indizes aus dem angegebenen Array zurückzugeben.
Geben Sie bei einem gegebenen Array von Ganzzahlen und einem Ganzzahlziel die Indizes der beiden Zahlen so zurück, dass sie sich zum Ziel addieren. Jede Eingabe hat genau eine Lösung und Sie dürfen dasselbe Element nicht zweimal verwenden.
Eingabe: Nums = [2, 7, 11, 15], Ziel = 9
Ausgabe: [0, 1]
Erläuterung: nums[0] nums[1] = 2 7 = 9
Der erste Ansatz für jedes Problem könnte einfach darin bestehen, etwas zu erledigen und das konzeptionell am einfachsten.
Durchlaufen Sie das Array mit zwei Schleifen und überprüfen Sie alle Zahlenpaare.
const twoSum = (nums, target) => { for(let i = 0; i < nums.length; i++) { for (let j = i + 1; j < nums.length; j++) { console.log(` i is ${nums[i]} and k is ${nums[j]}`) // lets check if we add the 2 numbers if it equals target if (target === nums[i] + nums[j]) { return [i, j] } } } }; const nums = [2, 7, 11, 15]; const target = 9; console.log(twoSum(nums, target));
Zeitkomplexität ist O(n²)
Raumkomplexität ist O(1)
1.Wir haben keine neue Datenstruktur erstellt
Wir werden eine Hash-Map verwenden, um dieses Problem zu lösen. Lassen Sie uns diesen Algorithmus etwas erklären
Die erste Lösung könnte also darin bestehen, das reguläre JS-Objekt zu verwenden und unsere HashMap auf diese Weise zu erstellen
const twoSumOptimizedRegularObject = (nums, target) => { const objectStuff = {} // write a for loop, to go through the arr for (let i = 0; i < nums.length; i++) { const complement = target - nums[i] if (complement in objectStuff) { return [objectStuff[complement],i] } objectStuff[nums[i]] = i } } const nums = [2, 7, 11, 15]; const target = 9; console.log(twoSumOptimizedRegularObject(nums, target));
Die zweite Lösung ist tatsächlich die Verwendung der Kartendatenstruktur in JS. Dies ermöglicht strengere und robustere Implementierungen unter Verwendung eines Kartenobjekts (eingeführt in ES6) und wird oft bevorzugt. Eine Map bietet explizites Hash-Map-Verhalten und vermeidet einige Eigenheiten von JavaScript-Objekten, wie das Erben von Eigenschaften von Object.prototype.
const twoSumOptimized = (nums, target) => { const mapOfStuff = new Map() // write a for loop, to go through the arr for (let i = 0; i < nums.length; i++) { let complement = target - nums[i] if (mapOfStuff.has(complement)) { return [mapOfStuff.get(complement), i] } mapOfStuff.set(nums[i], i) } } const nums = [2, 7, 11, 15]; const target = 9; console.log(twoSumOptimized(nums, target));
Zeitkomplexität ist O(n)
Raumkomplexität ist O(n)
Im schlimmsten Fall könnten wir fast alle Nummern speichern
Kompromiss zwischen Zeit und Speichereffizienz
Das obige ist der detaillierte Inhalt vonZwei-Summen-Problem in Javascript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!