给你一个整数数组 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]
哈希表
/*
https://leetcode.cn/u/cshappyeveryday/
执行用时:55 ms, 在所有 Typescript 提交中击败了100.00%的用户
内存消耗:52.49 MB, 在所有 Typescript 提交中击败了50.00%的用户
2024年8月26日
*/
function countKDifference(nums: number[], k: number): number {const numMap = new Map<number, number>();let res = 0;for (const n of nums) {numMap.set(n, (numMap.get(n) || 0) + 1);}for (const n of nums) {// nums[i] - nums[j] = k// nums[i] = nums[j] + kconst sum = k + n;// 这里不需要把自己排队在外,因为题目中规定 k >= 1 && nums[i] >= 1// 而 nums[j] + k !== nums[j] (除非有0的存在)// 所以在搜索中,不会找到自身if (numMap.has(sum)) {res += numMap.get(sum)!;}}return res;
}