2006. 差的绝对值为 K 的数对数目
题目描述
给你一个整数数组 nums
和一个整数 k
,请你返回数对 (i, j)
的数目,满足 i < j
且 |nums[i] - nums[j]| == k
。
|x|
的值定义为:
- 如果
x >= 0
,那么值为x
。 - 如果
x < 0
,那么值为-x
。
示例 1:
输入:nums = [1,2,2,1], k = 1 输出:4 解释:差的绝对值为 1 的数对为: - [1,2,2,1] - [1,2,2,1] - [1,2,2,1] - [1,2,2,1]
示例 2:
输入:nums = [1,3], k = 3 输出:0 解释:没有任何数对差的绝对值为 3 。
示例 3:
输入:nums = [3,2,1,5,4], k = 2 输出:3 解释:差的绝对值为 2 的数对为: - [3,2,1,5,4] - [3,2,1,5,4] - [3,2,1,5,4]
提示:
1 <= nums.length <= 200
1 <= nums[i] <= 100
1 <= k <= 99
解法
方法一:暴力枚举
我们注意到,数组 \(nums\) 的长度不超过 \(200\),因此我们可以枚举所有的数对 \((i, j)\),其中 \(i < j\),并判断 \(|nums[i] - nums[j]|\) 是否等于 \(k\),是则答案加一。
最后返回答案即可。
时间复杂度 \(O(n^2)\),空间复杂度 \(O(1)\)。其中 \(n\) 为数组 \(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 |
|
方法二:哈希表或数组
我们可以使用哈希表或数组记录数组 \(nums\) 中每个数出现的次数,然后枚举数组 \(nums\) 中的每个数 \(x\),判断 \(x + k\) 和 \(x - k\) 是否在数组 \(nums\) 中,是则答案加上 \(x+k\) 和 \(x-k\) 出现的次数之和。
最后返回答案即可。
时间复杂度 \(O(n)\),空间复杂度 \(O(n)\)。其中 \(n\) 为数组 \(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 |
|