2006. Count Number of Pairs With Absolute Difference K
Description
Given an integer array nums and an integer k, return the number of pairs (i, j) where i < j such that |nums[i] - nums[j]| == k.
The value of |x| is defined as:
xifx >= 0.-xifx < 0.
Example 1:
Input: nums = [1,2,2,1], k = 1 Output: 4 Explanation: The pairs with an absolute difference of 1 are: - [1,2,2,1] - [1,2,2,1] - [1,2,2,1] - [1,2,2,1]
Example 2:
Input: nums = [1,3], k = 3 Output: 0 Explanation: There are no pairs with an absolute difference of 3.
Example 3:
Input: nums = [3,2,1,5,4], k = 2 Output: 3 Explanation: The pairs with an absolute difference of 2 are: - [3,2,1,5,4] - [3,2,1,5,4] - [3,2,1,5,4]
Constraints:
1 <= nums.length <= 2001 <= nums[i] <= 1001 <= k <= 99
Solutions
Solution 1: Brute Force Enumeration
Thinking
With \(n \le 200\), enumerating all \(i<j\) and testing \(|nums[i]-nums[j]|=k\) is about \(2 \times 10^4\) pairs, which fits. Values and \(k\) are small, so no extra structure is required.
The double loop matches the definition directly.
We notice that the length of the array \(nums\) does not exceed \(200\), so we can enumerate all pairs \((i, j)\), where \(i < j\), and check if \(|nums[i] - nums[j]|\) equals \(k\). If it does, we increment the answer by one.
Finally, we return the answer.
The time complexity is \(O(n^2)\), and the space complexity is \(O(1)\). Here, \(n\) is the length of the array \(nums\).
1 2 3 4 5 6 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Solution 2: Hash Table or Array
Thinking
Solution 1 visits every pair. We only need the count of difference \(k\): for current \(x\), earlier \(x-k\) and \(x+k\) pair with it.
A running counter adds those hits, then records \(x\), giving a linear one-pass tally.
We can use a hash table or array to record the occurrence count of each number in the array \(nums\). Then, we enumerate each number \(x\) in the array \(nums\), and check if \(x + k\) and \(x - k\) are in the array \(nums\). If they are, we increment the answer by the sum of the occurrence counts of \(x + k\) and \(x - k\).
Finally, we return the answer.
The time complexity is \(O(n)\), and the space complexity is \(O(n)\). Here, \(n\) is the length of the array \(nums\).
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |