JS-Code, um zu erkennen, dass die Addition zweier beliebiger Zahlen in einem Array einer anderen Zahl entspricht

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.

Guess you like

Origin blog.csdn.net/Jet_Lover/article/details/129784421