仅以此纪录每日LeetCode所刷题目
题目描述:
示例:
思路:
今天的思路比较清晰,但是时间复杂度和空间复杂度都不是很理想。题目给定了一个k值,我们需要判断nums列表中存不存在两个相同的数之间的距离小于k值, 遇到有关查找的问题,我们首先想到用哈希表来解决。建立哈希表,key值存储数字,value存储相同数字的下标值。存储完毕之后我们来遍历value值,我们首先判断每个value对应的长度,如果所有的value值都为1,也就是没有重复的数字,那我们直接返回False即可。正常情况下我们遍历每个value值,value值在存储的时候就已经排好序了,我们可以直接求出两个相邻数字之间的范围,当我们直到小于k的范围时,直接返回True即可。遍历完成没有发现小于k的,我们返回False即可。
代码:
class Solution:
def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
dict1 = {}
for i in range(len(nums)):
if nums[i] in dict1:
dict1[nums[i]].append(i)
else:
dict1[nums[i]] = [i]
for i in dict1.values():
if len(i) == 1:
next
else:
for j in range(1,len(i)):
if i[j] - i[j-1] <= k:
return True
return False