Leetcode 存在重复元素II

这段代码的算法思想可以用以下步骤来解释:

算法思想

  1. 使用哈希表(HashMap)存储每个元素的索引

    • 遍历数组 nums 时,使用一个 HashMap 来记录每个元素的值和它的索引位置。这样可以快速查找之前出现过的相同元素的索引。
  2. 检查是否存在符合条件的重复元素

    • 对于数组中的每个元素 nums[i],如果 HashMap 中已经存在这个元素(即之前已经出现过相同的元素),我们就获取它之前的索引 j(即 map.get(nums[i]))。
    • 然后检查当前索引 i 和之前的索引 j 的距离是否小于或等于 k。如果满足条件 i - j <= k,就返回 true,表示找到了符合条件的重复元素。
  3. 更新哈希表

    • 如果 HashMap 中不存在当前元素,或者当前元素虽然存在,但它的索引不满足条件 i - j <= k,那么就更新 HashMap,将当前元素的索引 i 存储到 HashMap 中。这样可以确保 HashMap 中存储的是最近出现的该元素的索引位置。
  4. 遍历完成后返回 false

    • 如果遍历完整个数组都没有找到符合条件的重复元素,就返回 false

代码复杂度

  • 时间复杂度O(n),因为我们只需要遍历一遍数组,且每次在哈希表中查找、插入的时间复杂度都是常数 O(1)
  • 空间复杂度O(min(n, k)),因为哈希表中最多只会存储 k 个最近的元素。
java 复制代码
class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        Map<Integer, Integer> map = new HashMap<>();

        for(int i = 0; i < nums.length; ++i) {
            if(map.containsKey(nums[i])) {
                int j = map.get(nums[i]);
                if(i - j <= k) {
                    return true;
                }
            }
            map.put(nums[i], i);
        }
        return false;
    }
}
相关推荐
鹿角片ljp6 分钟前
LeetCode215: 数组中的第K个最大元素 —— 从快速选择到堆排
算法·排序算法
天若有情67315 分钟前
用动态规划思路,一步一步实现响应式数据(从本质到落地)
算法·动态规划·代理模式
isNotNullX15 分钟前
数据挖掘是什么?数据挖掘算法有哪些?
人工智能·算法·数据挖掘
剑挑星河月20 分钟前
73.矩阵置零
数据结构·算法·leetcode·矩阵
MicroTech202520 分钟前
MLGO微算法科技:面向大规模量子网络的通用纠错方案实现关键进展
网络·科技·算法
Rabitebla20 分钟前
【C++】手撕日期类——运算符重载完全指南(含易错点+底层逻辑分析)
java·c语言·开发语言·数据结构·c++·算法·链表
做cv的小昊23 分钟前
【TJU】应用统计学——第六周作业(3.3 两个正态总体参数的假设检验、3.4 非正态总体参数的假设检验、4.1 一元线性回归分析)
笔记·算法·数学建模·矩阵·回归·线性回归·学习方法
_深海凉_28 分钟前
LeetCode热题100-单词拆分
算法·leetcode·职场和发展
wearegogog12329 分钟前
基于蚁群算法的无人机三维航路规划(MATLAB实现)
算法·matlab·无人机
旖-旎34 分钟前
递归(快速幂)(5)
c++·算法·力扣·递归