#1865

Finding Pairs With a Certain Sum

specialist · 700 · lc medium +30 · 61.6% accepted · 1,036 likes · top 62%

Description

You have two integer arrays nums1 and nums2. Design a data structure that supports:

- Adding a positive integer to an element in nums2.

- Counting pairs where elements from nums1 and nums2 sum to a given total.

Implement the FindSumPairs class:

- FindSumPairs(int[] nums1, int[] nums2) — Initializes with both arrays.

- void add(int index, int val) — Applies nums2[index] += val.

- int count(int tot) — Returns the number of pairs (i, j) with nums1[i] + nums2[j] == tot.

Example 1:

Input
["FindSumPairs", "count", "add", "count", "count", "add", "add", "count"]
[[[1, 1, 2, 2, 2, 3], [1, 4, 5, 2, 5, 4]], [7], [3, 2], [8], [4], [0, 1], [1, 1], [7]]
Output
[null, 8, null, 2, 1, null, null, 11]

Example 2:

Explanation
FindSumPairs findSumPairs = new FindSumPairs([1, 1, 2, 2, 2, 3], [1, 4, 5, 2, 5, 4]);
findSumPairs.count(7); // return 8; pairs (2,2), (3,2), (4,2), (2,4), (3,4), (4,4) make 2 + 5 and pairs (5,1), (5,5) make 3 + 4
findSumPairs.add(3, 2); // now nums2 = [1,4,5,4,5,4]
findSumPairs.count(8); // return 2; pairs (5,2), (5,4) make 3 + 5
findSumPairs.count(4); // return 1; pair (5,0) makes 3 + 1
findSumPairs.add(0, 1); // now nums2 = [2,4,5,4,5,4]
findSumPairs.add(1, 1); // now nums2 = [2,5,5,4,5,4]
findSumPairs.count(7); // return 11; pairs (2,1), (2,2), (2,4), (3,1), (3,2), (3,4), (4,1), (4,2), (4,4) make 2 + 5 and pairs (5,3), (5,5) make 3 + 4

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16