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

文章目录


1、题目描述

 存在重复元素。

 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 numsi == numsj 且 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 
相关推荐
wang09075 分钟前
硬着头皮学数据结构和算法之Myers算法
数据结构·算法
蓝悦无人机16 分钟前
无人机系列之飞控算法:从PID到AI,飞行控制的核心进化
人工智能·算法·无人机·飞控系统
憨波个19 分钟前
【说话人日志】DiariZen
人工智能·深度学习·算法·语音识别
用户73416810354821 分钟前
被忽视的输入:为什么变工况故障诊断需要引入控制回路信号?
算法
垆边人似月.32 分钟前
华为机试题 :最长递增子序列题目
数据结构·c++·算法·华为
动词ing1 小时前
【题目练习】算法 组合总和
算法
程序员-Benothing1 小时前
Linux文本排序统计命令:sort、uniq、wc、cut、tr实战
java·开发语言·算法
开发者联盟league1 小时前
c++11 使用chrono库转换时间点和字符串,计算时间点间隔
java·c++·算法
老歌老听老掉牙1 小时前
两个平面旋转平移坐标系间的坐标变换关系
python·算法·平面·旋转·平移
W.A委员会2 小时前
PID与PID整定
python·算法