Gegeben eine Liste von zahlen und eine Zahl k, gibt an, ob zwei beliebige zahlen aus der Liste hinzufügen von bis zu k

Diese Frage wurde in der Google-Programmierung interview. Ich dachte an zwei Ansätze für das gleiche:

  1. Finden Sie alle untersequenzen der Länge. Dabei berechnen der Summe und der beiden Elemente und überprüfen, ob es ist gleich k. Wenn Ihr, drucken Sie, ja, sonst halten die Suche. Dies ist eine brute-Force-Ansatz.

  2. Sortieren Sie das array in nicht-absteigender Reihenfolge. Starten Sie dann das Durchlaufen des Arrays von dessen rechten Ende. Sagen wir, wir haben das sortierte array, {3,5,7,10} und wir wollen die Summe von 17. Wir beginnen element 10, index=3, wir bezeichnen den index mit 'j'. Dann das aktuelle element und berechnen required_sum= Summe - current_element. Danach führen wir eine binäre oder ternäre Suche im array[0- (j-1)] zu finden, wenn es ein element, dessen Wert gleich dem required_sum. Wenn wir finden, ein solches element, können wir durchbrechen, wie wir gefunden haben, eine Teilfolge der Länge 2, deren Summe die gegebene Summe. Wenn wir nicht finden, eine solches element, und verringern Sie dann den index j und wiederholen Sie die oben genannten Schritte für die daraus entstehenden subarray Länge= Länge-1, d.h. durch ohne das element mit dem index 3 in diesem Fall.

Hier haben wir berücksichtigt, dass array könnte negative als auch als positive ganze zahlen.

Können Sie vorschlagen, eine bessere Lösung als diese? Ein DP-Lösung vielleicht? Eine Lösung, die weiter zu reduzieren, ist es Zeit, Komplexität.

  • Es ist ein O(n) Raum und Zeit-Algorithmus für diese. Für jedes element prüfen, ob es existiert in der hashmap. Wenn nicht,' store k - arr[i] bewegen und auf das nächste element.
  • Wörterbuch und die Bedeutung der Summe machen trick dieser Frage.
  • Kann zahlen im array duplizieren?
Schreibe einen Kommentar