1995. Finding Pairs With A Certain Sum¶
Difficulty: Medium
LeetCode Problem View on GitHub
1995. Finding Pairs With a Certain Sum
Medium
You are given two integer arrays nums1 and nums2. You are tasked to implement a data structure that supports queries of two types:
- Add a positive integer to an element of a given index in the array
nums2. - Count the number of pairs
(i, j)such thatnums1[i] + nums2[j]equals a given value (0 <= i < nums1.lengthand0 <= j < nums2.length).
Implement the FindSumPairs class:
FindSumPairs(int[] nums1, int[] nums2)Initializes theFindSumPairsobject with two integer arraysnums1andnums2.void add(int index, int val)Addsvaltonums2[index], i.e., applynums2[index] += val.int count(int tot)Returns the number of pairs(i, j)such thatnums1[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] 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
Constraints:
1 <= nums1.length <= 10001 <= nums2.length <= 1051 <= nums1[i] <= 1091 <= nums2[i] <= 1050 <= index < nums2.length1 <= val <= 1051 <= tot <= 109- At most
1000calls are made toaddandcounteach.
Solution¶
import java.util.HashMap;
class FindSumPairs {
private HashMap<Integer, Integer> map;
private int arr[];
private int brr[];
public FindSumPairs(int[] nums1, int[] nums2) {
map = new HashMap<>();
arr = new int[nums1.length];
brr = new int[nums2.length];
for (int ele : nums2)
map.put(ele, map.getOrDefault(ele, 0) + 1);
for (int i = 0; i < nums1.length; i++)
arr[i] = nums1[i];
for (int i = 0; i < nums2.length; i++)
brr[i] = nums2[i];
}
public void add(int index, int val) {
int lastVal = brr[index];
map.put(lastVal, map.getOrDefault(lastVal, 0) -1);
if (map.getOrDefault(lastVal, 0) == 0)
map.remove(lastVal);
brr[index] += val;
map.put(brr[index], map.getOrDefault(brr[index], 0) + 1);
}
public int count(int tot) {
int count = 0;
for (int i = 0; i < arr.length; i++) {
int current = arr[i];
int req = tot - current;
count += map.getOrDefault(req, 0);
}
return count;
}
}
Complexity Analysis¶
- Time Complexity:
O(?) - Space Complexity:
O(?)
Approach¶
Detailed explanation of the approach will be added here