Algorithmusgymnastik 10

Sum of Two Values Geben Sie ein Array aus Ganzzahlen und einen Wert an, um festzustellen, ob die Summe der beiden Elemente des Arrays dem angegebenen Wert entspricht.

Erläuterung

Screen Shot 2020-01-02 at 17.09.26.png FALL1: Wenn Ziel = 10, 2 + 8 = 10, wird true zurückgegeben. FALL 2: Wenn Ziel = 20, werden die beiden Paare nicht gefunden und false wird zurückgegeben.

Solution Runtime Complexity O(n) Scannt das gesamte Array einmal und speichert die besuchten Elemente in einem Hashset. Gibt an, ob 'val - e' im Hashset für element'e 'im Array während des Scans vorhanden ist Überprüfen Sie also, ob auf 'val --e' bereits zugegriffen wird. Wenn val - e im Hashset gefunden wird, befindet sich ein Paar (e, val-e) im Array und Dies bedeutet, dass die Summe dem angegebenen Wert entspricht. Es gibt also true zurück. Gibt false zurück, wenn alle Elemente im Array erschöpft sind und kein solches Paar gefunden wird. Memory Complexity O(n) Der Speicher ist O (n), weil wir HashSet verwenden, das die Elemente des Arrays enthält.

Beispiel

Lassen Sie uns diesen Algorithmus mit dem ersten Beispiel ausführen, Wert = 10.

Screen Shot 2020-01-02 at 17.27.30.png Screen Shot 2020-01-02 at 17.28.07.png Screen Shot 2020-01-02 at 17.28.19.png Jetzt ist die Summe von 10 in Target und den beiden Elementen 2 und 8 in HashSet 10, sodass die Schleife endet und true zurückgibt.

Implementierung

findSum.java


import java.util.HashSet;
import java.util.Set;

public class findSum {
    public boolean find_sum_of_two(int[] A, int val) {
        Set<Integer> found_values = new HashSet<>();
        for (int a: A) {
            if (found_values.contains(val - a)) {
                return true;
            }
            found_values.add(a);
        }
        return false;
    }
}

Main.java


public class Main {

    static findSum algo = new findSum();

    static void test(int[] v, int val) {
        boolean output = algo.find_sum_of_two(v, val);
        System.out.println("exist(A, " + val + ") = " + (output ? "true" : "false") + "\n");
    }

    public static void main(String[] args) {
        int[] v = new int[]{2, 1, 8, 4, 7, 3};
        test(v, 3);
        test(v, 20);
        test(v, 1);
        test(v, 2);
        test(v, 7);
    }
}

Output Screen Shot 2020-01-02 at 17.33.37.png

Recommended Posts

Algorithmusgymnastik 12
Algorithmusgymnastik 10
Algorithmusgymnastik 3
Algorithmusgymnastik 9
Algorithmusgymnastik 14
Algorithmusgymnastik 2
Algorithmusgymnastik 7
Algorithmus Gymnastik 15
Algorithmus Gymnastik 16
Algorithmusgymnastik 8
Algorithmus Gymnastik 17
Algorithmus Gymnastik 18
Algorithmusgymnastik 11
Algorithmusübung 5
Algorithmusgymnastik 4
Algorithmus Gymnastik 24 Teilmengen
Algorithmus Gymnastik 23 Zusammenführungsintervalle
Algorithmus Gymnastik 20 Duplikate entfernen
Algorithmus Gymnastik 21 LinkedList-Zyklus
Algorithmus Gymnastik 24 Zyklische Sortierung
Algorithmus Gymnastik 19 No-Repeat-Teilzeichenfolge
Algorithmusübung 6
Algorithmus Gymnastik 24 Eine verknüpfte Liste umkehren
Python-Algorithmus
Algorithmusübungen 13
Algorithmus Gymnastik 20 Paar mit Zielsumme
Algorithmusgymnastik 22 Quadrieren eines sortierten Arrays
Algorithmus Gymnastik 24 Mitte der verknüpften Liste
Python-Memorandum (Algorithmus)
Wörterbuch-Lernalgorithmus
String-Suchalgorithmus