Leetcode 219. 存在重复元素 II

embedded/2024/9/24 6:20:16/

题目描述

给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j]abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false

示例 1:

输入:nums = [1,2,3,1], k = 3
输出:true

示例 2:

输入:nums = [1,0,1,1], k = 1
输出:true

示例 3:

输入:nums = [1,2,3,1,2,3], k = 2
输出:false

提示:

  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109
  • 0 <= k <= 105

思路解析

把数组中每个元素,以元素:下标的形式存入map中

如果map中已经包含该元素的key,那么判断下标是否满足条件,满足条件直接返回true

如果不满足条件,那么将当前key对应值替换成当前元素下标

因为i-j>k,此时如果j不动,i继续增大,那么永远都不会满足条件

所以只有j变大才可能满足条件

代码

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])) {map.put(nums[i], i);} else {int j = map.get(nums[i]);if (i - j <= k) {return true;} else {map.put(nums[i], i);}}}// 如果没有找到重复项,则返回falsereturn false;}
}

如下是大佬思路

维护一个哈希表,里面始终最多包含 k 个元素,当出现重复值时则说明在 k 距离内存在重复元素
每次遍历一个元素则将其加入哈希表中,如果哈希表的大小大于 k,则移除最前面的数字

class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {//维护一个不包含重复元素的set,size最大为kSet<Integer> set = new HashSet<>();for (int i = 0; i < nums.length; i++) {if (!set.add(nums[i])) {// 如果添加失败(即nums[i]已经存在于set中),则返回truereturn true;}else{if(set.size()>k){//移除set首位元素,由于set没有移除首位元素方法,所以根据值来移除set.remove(nums[i-k]);}}}// 如果没有找到重复项,则返回falsereturn false;}
}


http://www.ppmy.cn/embedded/98371.html

相关文章

无人机测绘技术及应前景详解

无人机测绘技术是一种将无人机技术、遥感技术、地理信息系统&#xff08;GIS&#xff09;和计算机技术相结合&#xff0c;对自然地理要素或地表人工设施的形状、大小、空间位置及其属性等进行测定、采集并绘制成图的技术。它利用高精度传感器&#xff08;如激光雷达、航拍相机等…

GT IP中Use Channel Bonding与Use Clock Correction的关系

在高速数据传输系统中&#xff0c;如PCIE等&#xff0c;为了确保多个数据通道之间的数据能够正确同步和对齐&#xff0c;通常会使用通道绑定技术。这种技术通过特定的字符序列来标识和同步不同通道的数据流。 当你选择“使用通道绑定”这个选项时&#xff0c;系统会在接收端启用…

KRTS 高速以太网:网络模块套接字 API

高速以太网&#xff1a;网络模块套接字 API 目录 高速以太网&#xff1a;网络模块套接字 API打开套接字关闭套接字无连接发送和接收通过连接发送和接收执行套接字命令安装套接字处理器 Socket模块基于Packet模块&#xff0c;实时提供更高的协议&#xff0c;如RAW-IP、TCP 和 UD…

CSP-CCF 202312-1 仓库规划

一、问题描述 二、解答 思路&#xff1a;定义二维数组&#xff0c;比较不同行的相同列数 代码如下&#xff1a; #include<iostream> using namespace std; int main() {int n, m;cin >> n >> m;int a[1001][11] { 0 };for (int i 1; i < n; i){for (…

React+Vis.js(05):vis.js的节点的点击事件

文章目录 需求实现思路抽屉实现完整代码需求 双击节点,弹出右侧的“抽屉”,显示节点的详细信息 实现思路 vis.network提供了一个doubleClick事件,代码如下: network.on(doubleClick, function (properties) {// console.log(nodes);let id = properties

C语言05--指针初识

内存地址 字节&#xff1a;字节是内存的容量单位&#xff0c;英文称为 byte&#xff0c;一个字节有8位&#xff0c;即 1byte 8bits地址&#xff1a;系统为了便于区分每一个字节而对它们逐一进行的编号&#xff0c;称为内存地址&#xff0c;简称地址。注:地址是按字节编号的&a…

集团数字化转型方案(三)

集团数字化转型方案通过系统整合人工智能&#xff08;AI&#xff09;、大数据、云计算和物联网&#xff08;IoT&#xff09;技术&#xff0c;建立了一个全面智能化的业务管理平台&#xff0c;涵盖从业务流程自动化、数据驱动决策支持&#xff0c;到客户体验优化和供应链管理的各…

【PyCharm安装】安装Python和PyCharm的注意事项!!!PyCharm常用的插件介绍。

安装Python的注意事项 确定所需版本&#xff1a;根据您的项目和库的要求&#xff0c;选择合适的Python版本进行安装。不同版本的Python可能支持不同的库和特性。确保网络连接&#xff1a;如果您使用的是在线安装方式&#xff0c;确保您的计算机有可靠的网络连接&#xff0c;以…