Back to all solutions
#2426 - Number of Pairs Satisfying Inequality
Problem Description
You are given two 0-indexed integer arrays nums1 and nums2, each of size n, and an integer diff. Find the number of pairs (i, j) such that:
- 0 <= i < j <= n - 1 and
- nums1[i] - nums1[j] <= nums2[i] - nums2[j] + diff.
Return the number of pairs that satisfy the conditions.
Solution
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @param {number} diff
* @return {number}
*/
var numberOfPairs = function(nums1, nums2, diff) {
const n = nums1.length;
const differences = new Array(n);
for (let i = 0; i < n; i++) {
differences[i] = nums1[i] - nums2[i];
}
let result = 0;
mergeSort(0, n);
return result;
function mergeSort(left, right) {
if (right - left <= 1) return;
const mid = Math.floor((left + right) / 2);
mergeSort(left, mid);
mergeSort(mid, right);
let i = left;
let j = mid;
while (i < mid && j < right) {
if (differences[i] <= differences[j] + diff) {
result += right - j;
i++;
} else {
j++;
}
}
const sorted = new Array(right - left);
let k = 0;
i = left;
j = mid;
while (i < mid && j < right) {
if (differences[i] <= differences[j]) {
sorted[k++] = differences[i++];
} else {
sorted[k++] = differences[j++];
}
}
while (i < mid) sorted[k++] = differences[i++];
while (j < right) sorted[k++] = differences[j++];
for (let p = 0; p < sorted.length; p++) {
differences[left + p] = sorted[p];
}
}
};