添加 problem 532

This commit is contained in:
YDZ
2019-06-21 20:10:09 +08:00
parent 690af7394d
commit fed16988a3
3 changed files with 164 additions and 0 deletions

View File

@ -0,0 +1,22 @@
package leetcode
func findPairs(nums []int, k int) int {
if k < 0 || len(nums) == 0 {
return 0
}
var count int
m := make(map[int]int, len(nums))
for _, value := range nums {
m[value]++
}
for key, _ := range m {
if k == 0 && m[key] > 1 {
count++
continue
}
if k > 0 && m[key+k] > 0 {
count++
}
}
return count
}

View File

@ -0,0 +1,83 @@
package leetcode
import (
"fmt"
"testing"
)
type question532 struct {
para532
ans532
}
// para 是参数
// one 代表第一个参数
type para532 struct {
one []int
n int
}
// ans 是答案
// one 代表第一个答案
type ans532 struct {
one int
}
func Test_Problem532(t *testing.T) {
qs := []question532{
question532{
para532{[]int{3, 1, 4, 1, 5}, 2},
ans532{2},
},
question532{
para532{[]int{1, 2, 3, 4, 5}, 1},
ans532{4},
},
question532{
para532{[]int{1, 3, 1, 5, 4}, 0},
ans532{1},
},
question532{
para532{[]int{}, 3},
ans532{0},
},
// question532{
// para532{[]int{1, 2, 3, 2, 3, 2, 3, 2}, 0},
// ans532{[]int{1, 2, 3, 2, 3, 2, 3, 2}},
// },
// question532{
// para532{[]int{1, 2, 3, 4, 5}, 5},
// ans532{[]int{1, 2, 3, 4}},
// },
// question532{
// para532{[]int{}, 5},
// ans532{[]int{}},
// },
// question532{
// para532{[]int{1, 2, 3, 4, 5}, 10},
// ans532{[]int{1, 2, 3, 4, 5}},
// },
// question532{
// para532{[]int{1}, 1},
// ans532{[]int{}},
// },
}
fmt.Printf("------------------------Leetcode Problem 532------------------------\n")
for _, q := range qs {
_, p := q.ans532, q.para532
fmt.Printf("【input】:%v 【output】:%v\n", p, findPairs(p.one, p.n))
}
fmt.Printf("\n\n\n")
}

View File

@ -0,0 +1,59 @@
# [532. K-diff Pairs in an Array](https://leetcode.com/problems/k-diff-pairs-in-an-array/)
## 题目
Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an integer pair (i, j), where i and j are both numbers in the array and their absolute difference is k.
Example 1:
```c
Input: [3, 1, 4, 1, 5], k = 2
Output: 2
Explanation: There are two 2-diff pairs in the array, (1, 3) and (3, 5).
Although we have two 1s in the input, we should only return the number of unique pairs.
```
Example 2:
```c
Input:[1, 2, 3, 4, 5], k = 1
Output: 4
Explanation: There are four 1-diff pairs in the array, (1, 2), (2, 3), (3, 4) and (4, 5).
```
Example 3:
```c
Input: [1, 3, 1, 5, 4], k = 0
Output: 1
Explanation: There is one 0-diff pair in the array, (1, 1).
```
Note:
1. The pairs (i, j) and (j, i) count as the same pair.
2. The length of the array won't exceed 10,000.
3. All the integers in the given input belong to the range: [-1e7, 1e7].
## 题目大意
给定一个数组,在数组里面找到几组不同的 pair 对,每个 pair 对相差 K 。问能找出多少组这样的 pair 对。
## 解题思路
这一题可以用 map 记录每个数字出现的次数。重复的数字也会因为唯一的 key不用担心某个数字会判断多次。遍历一次 map每个数字都加上 K 以后,判断字典里面是否存在,如果存在, count ++,如果 K = 0 的情况需要单独判断,如果字典中这个元素频次大于 1count 也需要 ++。