题目
给你一个整数数组 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]
解题
方法一:哈希表
因为j > i j>ij>i, 只要在哈希表中查找n u m s [ i ] nums[i]nums[i]即可
n u m s [ i ] = ± k + n u m s [ j ] nums\left[ i \right] =\pm k+nums\left[ j \right]nums[i]=±k+nums[j]
class Solution { public: int countKDifference(vector<int>& nums, int k) { unordered_map<int,int> map;//值,数量 int res=0; for(int i=0;i<nums.size();i++){ res+=map[k+nums[i]]+map[-k+nums[i]]; map[nums[i]]++; } return res; } };