https://leetcode-cn.com/problems/contains-duplicate-ii/
点击查看【bilibili】

题目

给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。

示例

  1. 输入: nums = [1,2,3,1], k = 3
  2. 输出: true
输入: nums = [1,0,1,1], k = 1
输出: true
输入: nums = [1,2,3,1,2,3], k = 2
输出: false

解答

k个元素内是否有重复的元素
比如:[1,2,3,1],第一个元素1,判断[2,3,1]中是否有和第一个元素重复的

使用map,map的key为数组的value,map的value为数组值的索引
遍历整个数组
首先判断map里有没有1这个值,然后把1存到map里,值为0,
继续遍历,如果有相同的值,然后比较 当前值的索引 - map里相同值的索引 是否小于等于 k
如果小于等于,则返回true
遍历完数组都没有返回true,就返回false

答案

var containsNearbyDuplicate = function(nums, k) {
  const map = new Map()
  for(let i=0;i<nums.length;i++) {
    // 如果存在这个数,并且 当前索引 - 与当前相同值的索引 如果小于等于k,返回true
    if(map.has(nums[i]) && (i - map.get(nums[i]) <= k)) {
      return true
    }else {
      map.set(nums[i], i)
    }
  }
  return false
};