LeetCode 2006. Count Number of Pairs With Absolute Difference K

LeetCode 2006. Count Number of Pairs With Absolute Difference K (差的绝对值为 K 的数对数目)

题目

链接

https://leetcode-cn.com/problems/count-number-of-pairs-with-absolute-difference-k/

问题描述

给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k 。

|x| 的值定义为:

如果 x >= 0 ,那么值为 x 。
如果 x < 0 ,那么值为 -x 。

示例

输入: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]

提示

1 <= nums.length <= 200
1 <= nums[i] <= 100
1 <= k <= 99

思路

首先思路就是双重循环,可以解决问题。

再思考一下,差为绝对值,那只有两种情况,另一个数为num+k或者num-k,用数组存储,遍历两次即可。

ij有严格单调的关系,如果用哈希表存储,对于每个数,只考虑之前的数,那就遍历一次即可。

  1. 之前存在num+k,ans增加数量
  2. 之前存在num-k,ans增加数量
  3. 每个数都要更新一下hashmap,前面是数值,后面是个数。

复杂度分析

时间复杂度 O(n)
空间复杂度 O(n)

代码

Java

    public int countKDifference(int[] nums, int k) {
        int ans = 0;
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int num : nums) {
            if(map.containsKey(num+k)){
                ans += map.get(num + k);
            }
            if(map.containsKey(num-k)){
                ans += map.get(num - k);
            }
            map.put(num, map.getOrDefault(num,0) + 1);
        }
        return ans;
    }
posted @ 2022-02-09 19:49  cheng102e  阅读(74)  评论(0编辑  收藏  举报