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

文章目录


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 
相关推荐
Ivanqhz2 小时前
php8 use-def链
算法·php
evans在进步3 小时前
LeetCode 189 轮转数组:三次反转原地解决,图解 Java 实现
java·算法·leetcode
歌_顿3 小时前
Drawing_To_Model
算法
龍德明宇3 小时前
AI不会疼-龍德明宇
人工智能·算法·大语言模型llm·负主体性·ai存在论
302wanger3 小时前
程序员写 SOP:把脑子里的流程固化下来
算法
科学实验家4 小时前
完全背包
算法
Smoothcloud润云4 小时前
GPU租赁数据安全怎么做?
人工智能·算法·ai·aigc·gpu算力·gpu
呜喵王阿尔萨斯4 小时前
extern “C“ in C++
c语言·c++·算法
乐观勇敢坚强的老彭4 小时前
C++信奥静态数组和动态数组
数据结构·c++·算法
月光船幽幽5 小时前
呼吸孔设计重塑系统稳定性
python·科技·算法