【每日一题】 532数组中的k-diff数对

73 阅读1分钟

话不多说先看题

532. 数组中的 k-diff 数对

给定一个整数数组和一个整数 k,你需要在数组里找到 不同的 k-diff 数对,并返回不同的 k-diff 数对 的数目。 这里将 k-diff 数对定义为一个整数对 (nums[i], nums[j]),并满足下述全部条件:

  • 0 <= i < j < nums.length
  • |nums[i] - nums[j]| == k

注意|val| 表示 val 的绝对值。

示例 1:

输入: nums = [3, 1, 4, 1, 5], k = 2
输出: 2
解释: 数组中有两个 2-diff 数对, (1, 3) 和 (3, 5)。
尽管数组中有两个1,但我们只应返回不同的数对的数量。

示例 3: 很重要 注意k=0

输入: nums = [1, 3, 1, 5, 4], k = 0
输出: 1
解释: 数组中只有一个 0-diff 数对,(1, 1)。

思路

  1. 首先对数组排序
  2. 其次 用双指针i,j从列表头开始向下遍历
  3. i维护头指针到 数组尾
  4. j维护尾指针,首先保证尾指针在头指针前,在数组尾末
  5. 比值 相等结果加一 不相等 尾指针加一
  6. ** 有坑就是 k =0 时 ,表示两个数相等的情况
package main

import "sort"

func findPairs(nums []int, k int) (res int) {
   sort.Ints(nums)
   y, n := 0, len(nums)
   for x, num := range nums {
      if x == 0 || num != nums[x-1] {
         for y < n && (nums[y] < num+k || y <= x) {
            y++
         }
         if y < n && nums[y] == num+k {
            res++
         }
      }
   }
   return
}

for y < n && (nums[y] < num+k ||y <= x ) 这段我刚开始想的是 y< x 主要是没考虑 k= 0的情况