欢乐力扣:存在重复元素二

文章目录


1、题目描述

存在重复元素

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

2、思路1

暴力法,直接两层for循环,但会超时。

代码

python 复制代码
class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        # 暴力会超时 
        for i in range(len(nums)-1):
            for j in range(i+1, len(nums)):
                if nums[i] != nums[j]:
                    continue 
                else:
                    res = abs(i - j) <= k
                    if res is True:
                        return True 
        return False 

3、思路2

借助哈希表,来不断的存储元素值以及下标,若当前元素已经在字典里,则取出对应下标与k进行比较;若不满足条件,则将当前遍历的元素的下标存入字典,覆盖掉原来的下标。

代码

python 复制代码
class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        # 哈希表
        from collections import defaultdict 
        hash_map = defaultdict(int)
        for i in range(len(nums)):
            # 若当前元素不在哈希表,则存进去
            if nums[i] not in hash_map:
                hash_map[nums[i]] = i   
            # 若在哈希表里:
            else:
                res = abs(i - hash_map[nums[i]]) <= k 
                # 若查找成功,则返回True
                if res is True:
                    return True 
                else:
                    hash_map[nums[i]] = i  # 覆盖字典为最新的下标
        return False 
相关推荐
刚入坑的新人编程6 分钟前
暑期算法训练.11
数据结构·c++·算法·leetcode·链表
秋风起,再归来~11 分钟前
C++从入门到起飞之——智能指针!
开发语言·c++·算法
lifallen1 小时前
Disruptor高性能基石:Sequence并发优化解析
java·数据结构·后端·算法
麦兜*1 小时前
【算法】十大排序算法超深度解析,从数学原理到汇编级优化,涵盖 15个核心维度
java·汇编·jvm·算法·spring cloud·ai·排序算法
重生之我是Java开发战士1 小时前
【C语言】深度剖析指针(三):回调机制、通用排序与数组指针逻辑
c语言·开发语言·算法
zjoy_22331 小时前
[算法]Leetcode3487
java·学习·算法·leetcode
蒟蒻小袁1 小时前
力扣面试150题--只出现一次的数字II
算法·leetcode·面试
CHOTEST中图仪器2 小时前
三坐标测量机路径规划与补偿技术:如何用算法看见微米级误差?
算法·三坐标测量仪·三坐标测量机·精密测量技术
CoovallyAIHub2 小时前
数据集分享 | 稻田识别分割数据集、水稻虫害数据集
深度学习·算法·计算机视觉
朝朝又沐沐2 小时前
算法竞赛阶段二-数据结构(38)数据结构动态链表list
数据结构·算法·链表