前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >存在重复元素 II

存在重复元素 II

原创
作者头像
_kyle
修改2023-09-24 14:36:12
4580
修改2023-09-24 14:36:12
举报
文章被收录于专栏:kyle的专栏

题目描述

难度级别:简单

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

示例 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

解题思路

哈希表

嗯。。。简单无脑。。。判断哈希表中是否存在当前元素的key,若存在,判断2者值相差是否大于k,若大于则覆盖值,若小于则输出true。

代码语言:javascript
复制
const containsNearbyDuplicate = function(nums, k) {
    const hashMap = new Map()

    for (let i = 0; i < nums.length; i++) {
        const v = hashMap.get(nums[i])
        
        if (v && i + 1 - v <= k)
            return true
        else
            hashMap.set(nums[i], i + 1)
    }

    return false
};

集合

将元素存储于集合中,若集合中数量大于k,将集合第一个元素删除。在此情况下,若在集合中找到当前值,输出true。

代码语言:javascript
复制
const containsNearbyDuplicate = function(nums, k) {
    const set = new Set()

    for (let i = 0; i < nums.length; i++) {
        if (set.has(nums[i])) return true
        set.add(nums[i])
        if (set.size > k) set.delete(nums[i - k])      
    }

    return false
};

题目来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/contains-duplicate-ii

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
    • 示例 1:
      • 示例 2:
        • 示例 3:
        • 解题思路
          • 哈希表
          • 集合
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档