Die Summe zweier beliebiger Zahlen in einem Array entspricht einer anderen Zahl
Finden Sie bei einem gegebenen Ganzzahl-Array arr und einem Ganzzahl-Ziel die beiden Ganzzahlen im Array, deren Summe den Zielwert target darstellt.
Die Werte im Array werden nicht wiederholt und der Rückgabewert hat nur eine Antwort.
Listeneingabe arr = [1, 2, 3, 4, 5], Ziel = 9
Ausgabe [4, 5]
Hash-tabelle
let arr = [1, 2, 3, 4, 5]
let target = 9
let result = []
let map = {
}
arr.map(res => {
let complement = target - res
if (complement in map) {
result.push(complement, res)
}
map[res] = 1
})
console.log(result); //[4,5]
Verwenden Sie Map, um alle Elemente im Array zu speichern. Dann iterieren wir über jedes Element im Array, berechnen die Differenz zwischen dem Ziel minus dem aktuellen Element und dem Komplement und bestimmen, ob der Wert in der Karte vorhanden ist. Wenn er vorhanden ist, fügen wir ihn als Element zum Ergebnisarray hinzu und fügen das aktuelle Element hinzu dazu. in die Karte.
Die Zeitkomplexität ist O(n) , die optimale Lösung
Doppelzeiger
let arr = [1, 2, 3, 4, 5]
let target = 9
let result = []
arr.sort((a, b) => a - b); // 首先将数组排序
let left = 0;
let right = arr.length - 1;
while (left < right) {
let sum = arr[left] + arr[right];
if (sum === target) {
// 如果当前两个指针位置的值之和等于target,则将其添加到结果数组中
result.push([arr[left], arr[right]]);
left++;
right--;
} else if (sum < target) {
left++;
} else {
right--;
}
}
console.log(result); //[4,5]
Sortieren Sie zuerst das Array, verwenden Sie dann Doppelzeiger, um von beiden Enden des Arrays aus zu durchlaufen, berechnen Sie die Summe der Werte an den beiden Zeigerpositionen und bewegen Sie den Zeiger entsprechend, ob die Summe dem Zielwert entspricht und das Größenverhältnis.
Die Komplexität beträgt O(nlogn) , da das Array zuerst sortiert werden muss. Allerdings beträgt die Platzkomplexität dieses Algorithmus O(1), sodass er eine gute Wahl ist, wenn der Platzbedarf hoch ist.
Zwei for-Schleifen
let arr = [1, 2, 3, 4, 5]
let target = 9
let result = []
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] + arr[j] === target) {
result.push([arr[i], arr[j]]);
}
}
}
console.log(result); //[4,5]
Verwenden Sie zwei for-Schleifen, um jede Kombination von Elementen im Array zu durchlaufen, ihre Summe zu berechnen und zu bestimmen, ob sie dem Zielwert entspricht.
Die Komplexität beträgt O(n^2) , was bei der Verarbeitung einer kleinen Datenmenge verwendet werden kann, aber nicht empfohlen wird.