【JS每日一算法:剑指Offer系列】🟩164.存在重复元素 II(哈希表)

117 阅读1分钟

给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。

示例 1:

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

示例 2:

输入: nums = [1,0,1,1], k = 1
输出: true

示例 3:

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

提示:

  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109
  • 0 <= k <= 105

题解:

个人博客

更多JS版本题解点击链接关注该仓库👀

/**
 * @description: 哈希表  TC:O(n)  SC:O(n)
 * @author: JunLiangWang
 * @param {*} nums 给定数组
 * @param {*} k    给定元素k
 * @return {*}
 */
function hashMap(nums,k){
    /**
     * 本方案使用哈希表的方式,遍历数组每个元素,
     * 判断当前元素在哈希表中是否存在,如果存在,
     * 则表明有重复元素,计算两元素索引是否<=k,
     * 是则满足条件返回true,不是则将其装入哈希
     * 表中,继续遍历
     */
    const map = new Map();
    for (let i = 0; i < nums.length; i++) {
        if (map.has( nums[i]) && i - map.get( nums[i]) <= k) return true;
        map.set(num, i);
    }
    return false;
}