差的绝对值为 K 的数对数目(2022-2-9)每日一练

该博客介绍了如何解决寻找数组中差的绝对值为K的数对问题,提供了两种解题方法:暴力模拟和哈希记录。哈希记录的方法通过一次循环遍历数组,利用散列表查询之前满足条件的值,从而提高效率。并给出了具体的示例和解题思路。
摘要由CSDN通过智能技术生成

2006. 差的绝对值为 K 的数对数目(2022-2-9)

给你一个整数数组 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

解题思路

一个是暴力模拟(两层循环),一个是哈希记录(一层循环)

// 暴力模拟
var countKDifference = function(nums, k) {
  let len = nums.length,ret =0
  for(let i = 0; i < len; i++){
  	for(let j = i + 1;j < len; j++){
      if(Math.abs(nums[i]-nums[j]) == k) ret++
    }
  }
  return ret
};

哈希:我们记录每一个遍历到的值,并查询此值之前是否有满足要求的另一个值,hash.get(nums[i]+-k),如果存在这样的值,就把它出现的次数累加到结果上,否则,将以0计算。

// 哈希表
var countKDifference = function(nums, k) {
  let len = nums.length, ret =0
  let hash = new Map()
  for(let i = 0; i < len; i++ ){
    ret += (hash.get(nums[i]-k) || 0) + (hash.get(nums[i]+k) || 0)
    hash.set(nums[i], (hash.get(nums[i]) || 0) + 1)
  }
  return ret
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值