leetcode-存在重复元素

127 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

Hi, 大家好。

今后会按类分享算法题。

今天分享两道类似的题目:存在重复元素

217.存在重复元素

leetcode地址:leetcode.cn/problems/co…

难度

简单

描述

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

示例1

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

示例2

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

示例3

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

解法

  1. 使用查找表的原理
  2. 首先我们开始遍历数组
  3. 在遍历的过程中,如果hash中没有当前元素,就将当前元素设置次数为1
  4. 当hash中有当前元素,直接返回 true
  5. 否则返回false

代码

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    let map = new Map();

    for(let i of nums){

        if(map.has(i)){
            return true
        }
        map.set(i, 1)
    }
    return false
};

219. 存在重复元素 II

leetcode地址:leetcode.cn/problems/co…

难度

简单

描述

给你一个整数数组 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. 这道题也是使用查找表的原理
  2. 定义一个hash
  3. 遍历数组
  4. 将遍历的元素和当前索引存入到hash
  5. 判断如果hash中有当前遍历的元素,并且 当前索引 减去 当前值在hash中对应的索引 小于 k,表示找到了符合题意的解,则返回true
  6. 否则,遍历完,一直没有找到,返回false

代码

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {boolean}
 */
var containsNearbyDuplicate = function(nums, k) {
    const map = new Map();

    for(let i in nums){
        if(map.has(nums[i]) && i - map.get(nums[i]) <= k){
            return true;
        }

        map.set(nums[i], i)
    }
    return false;
};