每日OJ题_哈希表④_力扣219. 存在重复元素 II

目录

[力扣219. 存在重复元素 II](#力扣219. 存在重复元素 II)

解析代码


力扣219. 存在重复元素 II

219. 存在重复元素 II

难度 简单

给你一个整数数组 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 <= 10^5
  • -10^9 <= nums[i] <= 10^9
  • 0 <= k <= 10^5
cpp 复制代码
class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {

    }
};

解析代码

快速定位到两个信息: 两个相同的元素 ,这两个相同元素的下标 。 因此,可以使用哈希表,令数组内的元素做 key 值,该元素所对应的下标做 val 值,将数组元素和下标绑定在⼀起,存到哈希表中。

cpp 复制代码
class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        unordered_map<int, int> hash; // 元素和下标
        for(int i = 0; i < nums.size(); ++i)
        {
            if(hash.count(nums[i])) // 如果哈希表中存在此元素
            {
                if(hash[nums[i]] - i <= k) // 如果此元素下标与当前下标的差<=k
                    return true;
            }
            hash[nums[i]] = i; // 覆盖前面的也没事,因为找<=k的
        }
        return false;
    }
};
相关推荐
czq_26867194877 分钟前
Python打卡第34天
开发语言·python·机器学习
FPGA信号处理9 分钟前
【凸优化】第一节课(下):保凸运算、分离超平面与 Farkas 引理
人工智能·算法·机器学习
Lhan.zzZ22 分钟前
Qt/QML:业务记录单展示、签名确认与 PDF 导出开发
c++·qt·pdf
傲世仙尊24 分钟前
类和对象上-class与struct实例化内存对齐与this指针
c++
怕浪猫26 分钟前
Agent 的记忆系统怎么设计?面试官想听的是这个
算法·面试·github
C++ 老炮儿的技术栈29 分钟前
C++ const 的3个核心作用
服务器·c语言·c++·算法·c
小黄人软件31 分钟前
粘贴助手C++版 支持 Windows 7 / 10 / 11 不会出现缺少api-ms-win-core-path-11-1-0.dll
开发语言·c++·windows
有毒的教程42 分钟前
Dev-C++ 避免爆栈(Stack Overflow)完整方案
c++·算法·深度优先
半亩码田42 分钟前
C#转Python第4.7篇:logging:Python 的标准日志库
开发语言·python·c#
程序员老陆43 分钟前
从汇编层面理解 C++ 多线程
开发语言·c++·程序设计