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;
    }
}
相关推荐
地平线开发者13 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮14 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者14 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考14 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx18 小时前
CART决策树基本原理
算法·机器学习
Wect18 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱19 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
Gorway1 天前
解析残差网络 (ResNet)
算法
拖拉斯旋风1 天前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect1 天前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript