LeetCode题练习与总结:存在重复元素Ⅱ--219

2024-09-07 13:12

本文主要是介绍LeetCode题练习与总结:存在重复元素Ⅱ--219,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、题目描述

给你一个整数数组 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 <= 10^5
  • -10^9 <= nums[i] <= 10^9
  • 0 <= k <= 10^5

二、解题思路

  • 使用一个哈希表(HashMap)来存储遍历过的数字及其对应的索引。
  • 遍历数组 nums,对于每个元素 nums[i]
    • 检查当前元素是否已经在哈希表中,如果存在,则计算当前索引 i 与哈希表中存储的索引之差的绝对值,如果小于等于 k,则返回 true
    • 如果当前元素不在哈希表中,或者不满足上述条件,则将当前元素及其索引存入哈希表。
  • 如果遍历完整个数组都没有找到满足条件的索引对,则返回 false

三、具体代码

import java.util.HashMap;
import java.util.Map;class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {Map<Integer, Integer> map = new HashMap<>(); // 哈希表存储元素及其索引for (int i = 0; i < nums.length; i++) {// 检查当前元素是否在哈希表中,并且索引差小于等于kif (map.containsKey(nums[i]) && i - map.get(nums[i]) <= k) {return true;}// 将当前元素及其索引存入哈希表map.put(nums[i], i);}return false; // 遍历完数组没有找到满足条件的索引对}
}

这段代码中,我们使用了一个HashMap来存储数组中的元素和它们对应的索引。当我们遍历数组时,我们首先检查当前元素是否已经在HashMap中,如果是,则检查索引差是否满足条件。如果满足条件,我们返回true。如果不满足,我们将当前元素和它的索引存入HashMap。如果遍历完整个数组都没有找到满足条件的索引对,我们返回false

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 遍历数组 nums 的时间复杂度是 O(n),其中 n 是数组 nums 的长度。
  • 在每次遍历时,我们会在哈希表 map 中进行两个操作:containsKey 和 put。在理想情况下,哈希表的操作时间复杂度是 O(1),这是因为哈希表通过散列函数将键均匀分布到桶中,从而可以在常数时间内访问、插入和删除元素。

综上所述,整体算法的时间复杂度是 O(n),因为每个元素只被处理一次,且每次处理的时间复杂度是 O(1)。

2. 空间复杂度
  • 哈希表 map 的大小取决于数组 nums 中不同元素的数量。在最坏的情况下,如果数组中的所有元素都是唯一的,那么哈希表的大小将与数组 nums 的长度相同,即 O(n)。
  • 哈希表中的每个条目包含一个整数(数组中的元素)和一个整数(索引),因此每个条目的大小是 O(1)。

因此,整体算法的空间复杂度是 O(n),这是因为在最坏的情况下,我们需要存储数组中的所有元素及其索引。

五、总结知识点

  • 类定义 (class 关键字):

    • 定义了一个名为 Solution 的公共类。
  • 方法定义:

    • 定义了一个名为 containsNearbyDuplicate 的公共实例方法,接受一个整数数组 nums 和一个整数 k 作为参数,并返回一个布尔值。
  • 数据结构 (HashMap):

    • 使用了 HashMap,它是 Java 中的一个哈希表实现,用于存储键值对(在本例中是数组元素及其索引)。
  • 循环 (for 循环):

    • 使用了 for 循环来遍历数组 nums
  • 条件判断 (if 语句):

    • 使用了 if 语句来检查是否在哈希表中找到了与当前元素相等的元素,并且索引差满足小于等于 k 的条件。
  • 哈希表操作:

    • 使用了 HashMap 的 containsKey 方法来检查哈希表中是否包含特定的键。
    • 使用了 HashMap 的 get 方法来获取与特定键关联的值。
    • 使用了 HashMap 的 put 方法来将键值对插入到哈希表中。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

这篇关于LeetCode题练习与总结:存在重复元素Ⅱ--219的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145152

相关文章

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用