532.k-diff-pairs-in-an-array.go 501 B

12345678910111213141516171819202122232425262728293031
  1. type pair struct {
  2. _1 int
  3. _2 int
  4. }
  5. func findPairs(nums []int, k int) (cnt int) {
  6. n := len(nums)
  7. if n < 2 {
  8. return
  9. }
  10. sort.Ints(nums)
  11. m := make(map[pair]bool)
  12. fast, slow := 1, 0
  13. for fast < n {
  14. if det := nums[fast] - nums[slow]; det == k {
  15. if _, ok := m[pair{nums[slow], nums[fast]}]; !ok {
  16. cnt++
  17. m[pair{nums[slow], nums[fast]}] = true
  18. }
  19. fast, slow = fast+1, slow+1
  20. } else if det < k {
  21. fast++
  22. } else {
  23. slow++
  24. if fast == slow {
  25. fast++
  26. }
  27. }
  28. }
  29. return
  30. }