📑 题目:219. 存在重复元素 II

🚀 本题 LeetCode 传送门

题目大意

这是一道简单题,如果数组里面有重复数字,并且重复数字的下标差值小于等于 K 就输出 true,如果没有重复数字或者下标差值超过了 K ,则输出 flase。

解题思路

这道题可以维护一个只有 K 个元素的 map,每次只需要判断这个 map 里面是否存在这个元素即可。如果存在就代表重复数字的下标差值在 K 以内。map 的长度如果超过了 K 以后就删除掉 i-k 的那个元素,这样一直维护 map 里面只有 K 个元素。

代码

  1. package leetcode
  2. func containsNearbyDuplicate(nums []int, k int) bool {
  3. if len(nums) <= 1 {
  4. return false
  5. }
  6. if k <= 0 {
  7. return false
  8. }
  9. record := make(map[int]bool, len(nums))
  10. for i, n := range nums {
  11. if _, found := record[n]; found {
  12. return true
  13. }
  14. record[n] = true
  15. if len(record) == k+1 {
  16. delete(record, nums[i-k])
  17. }
  18. }
  19. return false
  20. }