LeetCode 219.存在重复元素 II

目录

题目:

题目描述:

题目链接:

思路:

核心思路:

思路详解:

代码:

C++代码:

Java代码:


题目:

题目描述:

题目链接:

219. 存在重复元素 II - 力扣(LeetCode)

思路:

核心思路:

哈希表(Map)

思路详解:

Map存的是键值对,这题键存的是数组中的元素值,值存的是该元素值的最新索引(下标),时间复杂度为O(n)。遍历整个数组把每一个元素和它的索引存入Map,每次存入一个元素先调用containsKey判断Map中是否存在相同的键值,如果存在再判断这个相同元素不同索引差值的绝对值是否<=k,只要存在一对满足要求就可以马上return true;退出。如果不满足就把这个键值对存入Map(该键不存在就是新存入的键值对,键已经存在就是更新最新索引)。如果已经遍历完数组全部元素都没有满足要求的,就返回false

代码:

C++代码:

复制代码
class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        unordered_map<int,int> mp;
        for(int i=0;i<nums.size();i++)
        {
            //由于unordered_map不允许存储具有重复键的元素,因此count函数基本上用于
            //检查unordered_map中是否存在带有给定键的元素
            if(mp.count(nums[i])&&abs(i+1-mp[nums[i]]<=k))
            {
                return true;
            }
            mp[nums[i]]=i+1;
        }
        return false;
    }
};

Java代码:

复制代码
class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        HashMap<Integer,Integer> hm = new HashMap<>();
        for(int i=0;i<nums.length;i++)
        {
            if(hm.containsKey(nums[i])&&Math.abs(i-hm.get(nums[i]))<=k)
            {
                return true;
            }
            hm.put(nums[i],i);
        }
        return false;
    }
}
相关推荐
哪 吒9 分钟前
【2025C卷】华为OD机试九日集训第3期 - 按算法分类,由易到难,提升编程能力和解题技巧
python·算法·华为od·华为od机试·2025c卷
机器学习之心HML10 分钟前
PSO-TCN-BiLSTM-MATT粒子群优化算法优化时间卷积神经网络-双向长短期记忆神经网络融合多头注意力机制多特征分类预测/故障诊断Matlab实现
神经网络·算法·cnn
数据与人工智能律师25 分钟前
智能合约漏洞导致的损失,法律责任应如何分配
大数据·网络·人工智能·算法·区块链
天天开心(∩_∩)1 小时前
代码随想录算法训练营第三十九天
算法
weisian1512 小时前
力扣经典算法篇-41-旋转图像(辅助数组法,原地旋转法)
算法·leetcode·职场和发展
程序员曦曦2 小时前
15:00开始面试,15:06就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
朝朝又沐沐3 小时前
算法竞赛阶段二-数据结构(40)数据结构栈的STL
开发语言·数据结构·c++·算法
2501_927773073 小时前
数据结构——单向链表
数据结构·算法
程序猫.3 小时前
C语言 二分查找:高效搜索有序数组
c语言·算法