算法萌新闯力扣:存在重复元素II

    力扣题:存在重复元素II

开篇

  这道题是217.存在重复元素的升级版,难度稍微提高。通过这道题,能加强对哈希表和滑动窗口的运用。

题目链接:219.存在重复元素II

题目描述

在这里插入图片描述

代码思路

1.利用哈希表,来保存数组元素及其索引位置
2.遍历所有数组元素,如果哈希表之前保存过该元素,则判断两者的索引值之差是否符合题目要求,符合则返回true。
3.每次遍历都要更新哈希表,把该数组元素和对应的索引值放入哈希表,即使是保存过的元素,也必须更新掉

代码纯享版

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])){if(i - map.get(nums[i]) <= k)return true;}map.put(nums[i], i);}return false;}
}

代码逐行解析版

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])){ //如果哈希表中存有该数组元素if(i - map.get(nums[i]) <= k)return true;//判断i和之前保存的索引值之差是否小于等于k}map.put(nums[i], i); //只要循环继续,就会执行这一步,就算哈希表之前有保存与nums[i]相同的键,此时也会更新}return false; //循环中没找到题目要求的重复元素,返回false}
}

其它解法

利用哈希表来维护一个滑动窗口,滑动窗口长度大于k,就移去最前面的元素

class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {HashSet<Integer> set = new HashSet<>();for(int i = 0; i < nums.length; i++) {if(set.contains(nums[i])) {return true;}set.add(nums[i]);if(set.size() > k) {set.remove(nums[i - k]);}}return false;}
}

再改进:代码中

if(set.contains(nums[i])) {return true;}set.add(nums[i]);

改成

 if(!set.add(nums[i])){return true;}

结语

 如果这篇文章对你理解这道题有所帮助,点个关注支持一下。我会每天更新力扣题的解析,与大家一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/180181.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年亚太杯APMCM数学建模大赛数据分析题MySQL的使用

2023年亚太杯APMCM数学建模大赛 以2022年C题全球变暖数据为例 数据分析&#xff1a; 以2022年亚太杯数学建模C题为例&#xff0c;首先在navicat建数据库然后右键“表”&#xff0c;单击“导入向导”&#xff0c;选择对应的数据格式及字符集进行数据导入 导入之后&#xff0c…

百度曹海涛:生成式AI正从“探索能力边界”向“推动应用落地”过渡

11月9日&#xff0c;以“星云棋布&#xff0c;步步为‘赢’”为主题的2023 IDC中国生态峰会在北京举办。会上&#xff0c;IDC中国区总裁霍锦洁女士的发表致辞。同时&#xff0c;IDC生态伙伴和行业领袖从多重维度分析了AI技术应用的发展&#xff0c;以及对于整体IT生态所产生的影…

PPT转PDF转换器:便捷的批量PPT转PDF转换软件

在数字化时代&#xff0c;文档转换已成为日常工作不可或缺的一环。特别是对于那些需要转发或发布演示文稿的人来说&#xff0c;如果希望共享给他人的PPT文件在演示过程中不被修改&#xff0c;那么将PPT文件转换为PDF格式已经成为一个常见的选择。大多数PDF阅读器程序都支持全屏…

[工业自动化-22]:西门子S7-15xxx编程 - 软件编程 - 如何PLC建立用户界面: SIMATIC 面板式HMI 或工控机PC HMI

目录 前言&#xff1a; 一、PLC&#xff08;可编程逻辑控制器&#xff09;的用户界面支持方式 1.1 概述 1.2 西门子&#xff08;Siemens&#xff09;的人机界面&#xff08;HMI&#xff09;支持多种类型 1.3 PC HMI VS SIMATIC HMI 二、PC—HMI—PLC连接架构的实现 三、…

Java实现拼图游戏

拼图游戏是一种智力类游戏&#xff0c;玩家需要将零散的拼图块按照一定的规律组合起来&#xff0c;最终拼成完整的图案。拼图游戏的难度可以根据拼图块数量、拼图的形状、图案的复杂程度等因素来调整。这种游戏适合各个年龄层的玩家&#xff0c;能够提高大脑的观察力、空间感知…

【libGDX】初识libGDX

1 前言 libGDX 是一个开源且跨平台的 Java 游戏开发框架&#xff0c;于 2010 年 3 月 11 日推出 0.1 版本&#xff0c;它通过 OpenGL ES 2.0/3.0 渲染图像&#xff0c;支持 Windows、Linux、macOS、Android、iOS、Web 等平台&#xff0c;提供了统一的 API&#xff0c;用户只需要…

图解分布式事务实现原理(一)

参考 本文参考https://zhuanlan.zhihu.com/p/648556608&#xff0c;在小徐的基础上做了个人的笔记。 分布式事务场景 事务核心特性 在聊分布式事务之前&#xff0c;我们先理清楚有关于 “事务” 的定义. 事务 Transaction&#xff0c;是一段特殊的执行程序&#xff0c;其需…

编程的简单实例,编程零基础入门教程,中文编程开发语言工具下载

编程的简单实例&#xff0c;编程零基础入门教程&#xff0c;中文编程开发语言工具下载 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件&…

PMP备考短期极限上岸攻略!

作为一位通过PMP考试成功上岸的3A人士&#xff0c;下面的文章包含了所有PMP考试的实用知识&#xff0c;是一本适合初学者的PMP备考攻略手册。如果你有意向了解或者报考PMP考试&#xff0c;这篇文章肯定会对你有很大的帮助&#xff01; 对于新手第一个需要知道的就是PMP是什么&…

水库大坝安全监测预警系统的重要作用

水库大坝建造在地质构造复杂、岩土特性不均匀的地基上&#xff0c;在各种荷载的作用和自然因素的影响下&#xff0c;其工作性态和安全状况随时都在变化。如果出现异常&#xff0c;又不被及时发现&#xff0c;其后果不堪设想。全天候实时监测&#xff0c;实时掌握水库水位、雨情…

Ps:利用 AI 技术创建人像皮肤图层蒙版

Photoshop 并没有提供专门选择人像皮肤的工具或命令&#xff08;色彩范围中的肤色选择非常不精准&#xff09;&#xff0c;但较新版的 Camera Raw 滤镜则提供了基于 AI 技术的选择人物并创建面部和身体皮肤蒙版的功能。 如果能将 Camera Raw 滤镜中创建的 AI 皮肤蒙版转换成 Ps…

RK3588平台开发系列讲解(摄像头篇)USB摄像头驱动分析

🚀返回专栏总目录 文章目录 一. USB摄像头基本知识1.1 内部逻辑结构1.2 描述符实例解析二. UVC驱动框架2.1、设备枚举过程2.2、数据传输过程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 USB摄像头驱动位于 drivers\media\usb\uvc\uvc_driver.c ,我们本篇重点看下…