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;
    }
}
相关推荐
余额瞒着我当琳25 分钟前
C++多态深入解析:多态概念,多态实现条件,虚函数表与内存分布,常见问题及注意事项
c++·算法
维克兜率天32 分钟前
【维克】模块3总结:从一行空数据,到一个能跑的模型
python·深度学习·算法
飞Link37 分钟前
定积分理论与 Python 仿真完全指南
python·算法
顶点多余1 小时前
9.15 面试问题总结(一面挂)
linux·面试·职场和发展
闲研随记1 小时前
RL算法学习:ArgMaxRL
算法·llm·强化学习·rl
飞Link1 小时前
零基础:离散数据积分与 Python 实现保姆级教程
python·算法
圣保罗的大教堂1 小时前
leetcode 836. 矩形重叠 简单
leetcode
淡海水1 小时前
11-03-Unity-List-T-和Dictionary-TKey-TValue-的性能调优实战
算法·unity·c#·list·dictionary
de之梦-御风1 小时前
【未来】.NET 开发在「劳动价值重估」下的定位与走向
职场和发展·.net