【LeeCode】454. Addition von vier Zahlen II

gibt Ihnen vier ganzzahlige Arraysnums1, nums2, nums3 und nums4, Die Array-Längen betragen alle n. Berechnen Sie bitte, wie viele Tupel (i, j, k, l) erfüllen können:

  • 0 <= i, j, k, l < n

  • nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0

Beispiel 1:

Eingabe: Nums1 = [1,2], Nums2 = [-2,-1], Nums3 = [-1,2], Nums4 = [0,2]
Ausgabe: 2
erklären:
Die beiden Tupel lauten wie folgt:
1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + (-1) + (-1) + 0 = 0

Beispiel 2:

Eingabe: Nums1 = [0], Nums2 = [0], Nums3 = [0], Nums4 = [0]
Ausgabe: 1

Hinweis:

  • n == nums1.length

  • n == nums2.length

  • n == nums3.length

  • n == nums4.length

  • 1 <= n <= 200

  • -228 <= nums1[i], nums2[i], nums3[i], nums4[i] <= 228

Auf den ersten Blick scheint diese Frage der Summe von drei Zahlen und der Summe von vier Zahlen zu ähneln, tatsächlich ist sie jedoch ganz anders.

Diese Frage ist eine klassische Frage, die die Hash-Methode verwendet, aber die Summe von drei Zahlen und die Summe von vier Zahlen sind nicht für die Verwendung der Hash-Methode geeignet, weil die Summe von drei Zahlen und die Summe von vier Zahlen Für die Summe dieser beiden Fragen ist es sehr schwierig, Hashing zu verwenden, um die Ergebnisse ohne Zeitüberschreitung zu deduplizieren, und es gibt viele Details, die geklärt werden müssen.

Bei dieser Frage geht es um vier unabhängige Arrays. Finden Sie einfach A[i] + B[j] + C[k] + D[l] = 0. Es besteht keine Notwendigkeit zu berücksichtigen, dass es vier wiederholte Elemente gibt, die sich zu 0 addieren. Situation, also im Vergleich zu Frage 18. Die Summe von vier Zahlen, die Frage 15. Die Summe von drei Zahlen ist noch viel einfacher!

Schritte zur Lösung dieses Problems:

  1. Definieren Sie zunächst eine Hashmap. Der Schlüssel ist die Summe der beiden Zahlen a und b und der Wert ist die Häufigkeit, mit der die Summe der beiden Zahlen a und b erscheint.

  2. Durchlaufen Sie die großen A- und großen B-Arrays, zählen Sie die Summe der Elemente der beiden Arrays und wie oft die Summe erscheint, und fügen Sie sie in die Karte ein.

  3. Definieren Sie die int-Variable res, um die Anzahl der Vorkommen von a+b+c+d = 0 zu zählen.

  4. Wenn nach dem Durchlaufen der großen C- und großen D-Arrays 0-(c+d) in der Karte erscheint, verwenden Sie res, um den Wert zu zählen, der dem Schlüssel in der Karte entspricht, also die Anzahl der Vorkommen.

  5. Zum Schluss geben Sie einfach den statistischen Wert res zurück.

lösen:

class Solution {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        int res = 0;
        Map<Integer, Integer> map = new HashMap<Integer, Integer> ();
        for (int i : nums1) {
            for (int j : nums2) {
                map.put(i + j, map.getOrDefault(i + j, 0) + 1);
            }
        }
        for (int i : nums3) {
            for (int j : nums4) {
                res += map.getOrDefault(0 - (i + j), 0);
            }
        }
        return res;
    }
}

Guess you like

Origin blog.csdn.net/weixin_48144018/article/details/134867330