LeetCode 0219.存在重复元素 II:哈希表

news/2025/2/1 2:31:26/

【LetMeFly】219.存在重复元素 II:哈希表

力扣题目链接:https://leetcode.cn/problems/contains-duplicate-ii/

给你一个整数数组 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

解题方法:哈希表

使用哈希表记录每个元素最后一次出现的位置。

遍历nums数组,如果当前元素在哈希表中出现过并且这次和上次出现位置只差不超过 k k k,则返回true

每次遍历完一个数组,更新哈希表中这个数字的“最后出现位置”。

  • 时间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))
  • 空间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))

AC代码

C++
/** @Author: LetMeFly* @Date: 2025-01-29 11:48:29* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-01-29 11:49:49*/
class Solution {
public:bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_map<int, int> ma;for (int i = 0; i < nums.size(); i++) {if (ma.count(nums[i]) && i - ma[nums[i]] <= k) {return true;}ma[nums[i]] = i;}return false;}
};
Python
'''
Author: LetMeFly
Date: 2025-01-29 11:51:06
LastEditors: LetMeFly.xyz
LastEditTime: 2025-01-29 11:51:09
'''
from typing import Listclass Solution:def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:ma = dict()for i, t in enumerate(nums):if t in ma and i - ma[t] <= k:return Truema[t] = ireturn False
Java
/** @Author: LetMeFly* @Date: 2025-01-29 11:53:14* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-01-29 11:55:24*/
import java.util.HashMap;class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {HashMap<Integer, Integer> ma = new HashMap<>();for (int i = 0; i < nums.length; i++) {if (i - ma.getOrDefault(nums[i], -1000000) <= k) {return true;}ma.put(nums[i], i);}return false;}
}
Go
/** @Author: LetMeFly* @Date: 2025-01-29 11:56:06* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-01-29 11:57:59*/
package mainfunc containsNearbyDuplicate(nums []int, k int) bool {ma := map[int]int{}for i, t := range nums {if p, ok := ma[t]; ok && i - p <= k {return true}ma[t] = i}return false
}

Happy New Year! 健康第一。

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/145392757


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

相关文章

深入解析JUnit中的@ClassRule注解

在Java开发中&#xff0c;JUnit是一个非常流行的单元测试框架&#xff0c;它为开发者提供了强大的工具来编写和执行测试用例。今天&#xff0c;我们来深入探讨一下JUnit中的ClassRule注解&#xff0c;看看它是如何工作的&#xff0c;并通过一个实际的示例来加深理解。 一、Clas…

SOME/IP--协议英文原文讲解1

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 一、SOM…

深度学习探索:ChatGPT数据分析精髓 梯度下降优化方法深度剖析

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

代码随想录day4

24.两两交换链表&#xff1a;注意虚拟头节点的使用 ListNode* swapPairs(ListNode* head) {ListNode* dummy new ListNode();dummy->next head;ListNode* current dummy;while(current->next ! nullptr && current->next->next ! nullptr){ListNode* t…

C#设置winform窗体自动适应不同分辨率的电脑

C#设置winform窗体自动适应不同分辨率的电脑 文章已被社区收录 加入社区 问题背景&#xff1a; 用winform开发了一个上位机软件&#xff0c;本机的台式开发电脑是宽屏的&#xff0c;上位机软件的显示效果良好&#xff0c;而在笔记本电脑上使用上位机软件时&#xff0c;出现了界…

STM32 TIM定时器配置

TIM简介 TIM&#xff08;Timer&#xff09;定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能&#xff…

Perl语言的语法糖

Perl语言的语法糖 引言 在编程语言的世界中&#xff0c;语法糖是一种极其重要的概念。它是指那些通过简单的语法或特定格式来增强语言可读性的功能&#xff0c;不仅可以简化代码&#xff0c;还能使得代码更加优雅。在众多编程语言中&#xff0c;Perl以其灵活性和强大的文本处…

性能测试丨分布式性能监控系统 SkyWalking

软件测试领域&#xff0c;分布式系统的复杂性不断增加&#xff0c;如何保证应用程序的高可用性与高性能&#xff0c;这是每一个软件测试工程师所面临的重大挑战。幸运的是&#xff0c;现在有了一些强大的工具来帮助我们应对这些挑战&#xff0c;其中之一便是Apache SkyWalking。…