leetcode2006 差的绝对值为K的数对数目 easy

题目:

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

示例:

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

解析:

哈希表+一次遍历即可,先定义一个map,遍历数组,key就是数组中的每个值,分别计算+k和-k在不在数组中,在的话就在几次就累加几次即可。

上面这段话翻译一下就是:我们要满足 |nums[i] - nums[j]| = k,这个公式变一下就是nums[i] = nums[j] + k  和  nums[i] = nums[j] - k。解题方法为定义一个哈希表,在循环遍历的过程中,判断哈希表中的nums[index]+k  和 nums[index]-k 存在的情况下,将值累加到结果中即可

func countKDifference(nums []int, k int) (ans int) {
    cnt := map[int]int{}
    for _, num := range nums {
        ans += cnt[num-k] + cnt[num+k]
        cnt[num]++
    }
    return
}

------------------------------------------------------------------------

补充:实在没理解上面的哈希表方法,还是暴力解吧

func countKDifference(nums []int, k int) int {
	res := 0

	for i, num1 := range nums {
		for _, num2 := range nums[:i] {
			if abs(num1, num2) == k {
				res++
			}
		}
	}
	return res
}

func abs[T int | int64 | float64](a, b T) T {
	c := a - b
	if c < 0 {
		return -c
	}
	return c
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值