Leetcode 1995. Count Special Quadruplets
Given an array nums
of n
integers, return the number of special quadruplets (a, b, c, d)
that satisfy the following conditions:
0 <= a < b < c < d < n
nums[a] + nums[b] + nums[c] == nums[d]
n
and the values in nums
?
n
could go up to a few thousand. The values in nums
are generally within the range of standard integer limits.nums
distinct?
O(n^4)
. However, optimizations should be attempted to reduce it if possible.A brute-force approach would involve iterating over all possible quadruplets, but that results in O(n^4)
complexity, which is not efficient for large n
.
We will approach this problem in two main steps:
c
and d
in nested loops.c
and d
, iterate over pairs of indices for sums before c
.import java.util.HashMap;
import java.util.Map;
public class Solution {
public int countQuadruplets(int[] nums) {
int n = nums.length;
int count = 0;
Map<Integer, Integer> sumPairs = new HashMap<>();
// Loop through each element considering it as d where 3 <= d < n
for (int d = n - 1; d >= 3; d--) {
// Update the sumPairs map by considering pairs nums[b] + nums[c]
for (int c = d - 1; c >= 2; c--) {
int target = nums[d] - nums[c];
if (sumPairs.containsKey(target)) {
count += sumPairs.get(target);
}
}
// Update the sumPairs map by considering pairs nums[a] + nums[b] before c
for (int b = 0; b < d - 2; b++) {
for (int a = 0; a < b; a++) {
int sum = nums[a] + nums[b];
sumPairs.put(sum, sumPairs.getOrDefault(sum, 0) + 1);
}
}
}
return count;
}
}
Thus, our solution has an overall time complexity of O(n^3)
, which is a significant improvement over bruteforce methods for large n
.
With this approach, large arrays up to the typical competitive programming limits (like 1000) can be handled efficiently within time constraints.
Got blindsided by a question you didn’t expect?
Spend too much time studying?
Or simply don’t have the time to go over all 3000 questions?