话不多说先看题
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)。
思路
- 首先对数组排序
- 其次 用双指针i,j从列表头开始向下遍历
- i维护头指针到 数组尾
- j维护尾指针,首先保证尾指针在头指针前,在数组尾末
- 比值 相等结果加一 不相等 尾指针加一
- ** 有坑就是 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的情况