存在重复元素 II

news/2024/11/29 8:34:34/

题意:

给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 ij ,满足 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 <= 10^5
  • -10^9 <= nums[i] <= 10^9
  • 0 <= k <= 10^5

题目来源: https://leetcode.cn/problems/contains-duplicate-ii/description/

解题方法:

一:暴力循环,运行会超出时间限制(不可取)

    /*** @param Integer[] $nums* @param Integer $k* @return Boolean*/
//超出时间限制
function containsNearbyDuplicate($nums, $k) {for($i = 0; $i < count($nums); $i++){for($j = $i + 1; $j < count($nums); $j++){if($nums[$i] == $nums[$j] && (abs($i-$j) <= $k)){return true;}}}return false;
}

方法二:解题思路 >>>> 类似hash,开辟一个临时数组,存储不重复的val,当有临时数组中存在该val时,做相关判断,如果符合条件,直接返回,如果不符合,则将该val的key替换为最新key

function containsNearbyDuplicate($nums, $k) {$temp = [];foreach($nums as $key => $value){if(isset($temp[$value]) && abs($key - $temp[$value]) <= $k){return true;}$temp[$value] = $key;}return false;
}

$nums =[1,2,3,1,2,3]; $k =2; 为例
前三个为123,当轮到第4元素(第二次出现的1时),此时的索引差值不满足小于2的条件,已经不可能再有比这个小的差值了,所以替换到最新的位置

参考:
作者:xiaoxie
链接:https://leetcode.cn/problems/contains-duplicate-ii/solutions/1059994/phpjie-ti-by-xiaoxie-w-yaum/
来源:力扣(LeetCode)


http://www.ppmy.cn/news/1216920.html

相关文章

Android Rxjava架构原理与使用的详解解答

简单介绍 Rxjava这个名字&#xff0c;其中java代表java语言&#xff0c;而Rx是什么意思呢&#xff1f;Rx是Reactive Extensions的简写&#xff0c;翻译过来就是&#xff0c;响应式拓展。所以Rxjava的名字的含义就是&#xff0c;对java语言的拓展&#xff0c;让其可以实现对数据…

git cherry-pick命令(合并单个或多个提交记录到当前分支)

文章目录 一、如何使用二、注意事项三、总结 Git cherr-pick&#xff1a;选择性合并提交 在项目中&#xff0c;我们常常需要选择性的把某个提交或某些提交单独的合并到当前分支&#xff0c;Git 提供了一个称为 cherry-pick 的命令来执行这个操作。 一、如何使用 1、要在当前分…

linux概念基础认识(基于阿里云ecs服务器操作)

文章目录 linux基本介绍SSH登录方式linux系统目录结构FHS介绍linux基础操作命令修改命令提示符名称时间同步Hash缓存表文件通配符创建硬链接创建软连接软连接与硬链接的区别 查看是否是文件或文件夹命令令牌文本管理工具nanovimgrepsed 用户和权限root用户用户组 linux权限构成…

windows10上使用Visual Studio对树莓派进行交叉编译示例

本文主要介绍通过Visual Studio对树莓派进行交叉编译的方法。 1 环境 宿主机&#xff1a; 系统&#xff1a;Windows10 开发平台&#xff1a;Visual Studio 2022 (我用的是社区版) VisualGDB: VisualGDB - Download (我下的试用版本) GNU工具链: Prebuilt GNU toolchain f…

设计模式系列之最终篇:大盘点

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概4000多字&#xff0c;预计阅读时间长需要3分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&#x…

使用 Redis 实现生成分布式全局唯一ID(使用SpringBoot环境实现)

目录 一、前言二、如何通过Redis设计一个分布式全局唯一ID生成工具2.1、使用 Redis 计数器实现2.2、使用 Redis Hash结构实现 三、通过代码实现分布式全局唯一ID工具3.1、编写获取工具3.2、测试获取工具 四、总结 一、前言 在很多项目中生成类似订单编号、用户编号等有唯一性数…

Android设计模式--Builder建造者模式

一&#xff0c;定义 Builder模式是一步一步创建一个复杂对象的创建型模式&#xff0c;它允许用户在不知道内部构建细节的情况下&#xff0c;可以更精细的控制对象的构造流程。 也就是将一个对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 二&…

DEC 深度编码聚类函数

2. 辅助目标函数 要使用输入 (bt, groups, embed_dim) 计算 DEC 模型的目标分布&#xff0c;关键部分是使用软分配 q &#xff0c;其形状为 (bt, groups, max_cluster) 。这里&#xff0c; max_cluster 是您要定位的集群数量。当您沿该维度执行聚类时&#xff0c;需要跨 group…