219.contains-duplicate-ii.go 536 B

123456789101112131415161718192021222324252627
  1. func containsNearbyDuplicate(nums []int, k int) bool {
  2. if k <= 0 {
  3. return false
  4. }
  5. queue := make([]int, 0)
  6. set := make(map[int]struct{})
  7. i, n := 0, len(nums)
  8. for i = 0; i < k && i < n; i++ {
  9. queue = append(queue, nums[i])
  10. if _, ok := set[nums[i]]; ok {
  11. return true
  12. } else {
  13. set[nums[i]] = struct{}{}
  14. }
  15. }
  16. for ; i < n; i++ {
  17. queue = append(queue, nums[i])
  18. if _, ok := set[nums[i]]; ok {
  19. return true
  20. } else {
  21. delete(set, queue[0])
  22. set[nums[i]] = struct{}{}
  23. queue = queue[1:]
  24. }
  25. }
  26. return false
  27. }