当前位置: 首页 > article >正文

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 个最近的元素。
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;
    }
}

http://www.kler.cn/a/394736.html

相关文章:

  • CentOS网络配置
  • ABAP关于PS模块CJ20N中项目物料的屏幕和字段增强CI_RSADD
  • [JAVAEE] 面试题(四) - 多线程下使用ArrayList涉及到的线程安全问题及解决
  • Spring Cloud Gateway(分发请求)
  • C++STL容器——map和set
  • 华为云前台用户可挂载数据盘和系统盘是怎么做到的?
  • 深入探索:Scrapy深度爬取策略与实践
  • Linux(文件特殊属性 + FACL 图片+大白话)
  • 机器学习基础04
  • Java项目实战II基于微信小程序的实习记录(开发文档+数据库+源码)
  • Unity3D 制作MMORPG 3D地图编辑器详解
  • FBX福币交易所恒指收跌1.96% 半导体股继续回调
  • SpringBoot整合Freemarker(四)
  • ‘nodemon‘ 不是内部或外部命令,也不是可运行的程序
  • Rollup failed to resolve import “destr“ from ***/node_modules/pinia-plugin-pers
  • Jmeter基础篇(23)TPS和QPS的异同
  • android bootchart安装使用指南
  • PHP Session
  • qt QFrame详解
  • 企望制造ERP drawGrid.action 接口SQL注入漏洞复现 [附POC]
  • 路径规划——RRT-Connect算法
  • Linux编辑/etc/fstab文件不当,不使用快照;进入救援模式
  • 后端一次性返回数据,前端分页
  • Window下PHP安装最新sg11(php5.3-php8.3)
  • BERT的中文问答系统30
  • 【GoWeb示例】通过示例学习 Go 的 Web 编程