题目:
Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the absolute difference between i and j is at most k.
题意:
给定数组和K,求数组中是否存在两个数相同且它们的距离不超过K。
方法一:性能92ms
class Solution(object):
def containsNearbyDuplicate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: bool
"""
ky = {}
if k < 0:
return False
if len(nums) < 2:
return False
for i in range(len(nums)):
j = ky.get(nums[i])
if j != None:
if i - j <= k:
return True
ky[nums[i]] = i
return False
方法二:性能65ms
class Solution(object):
def containsNearbyDuplicate(self, nums, k):
dict = {}
for i,v in enumerate(nums):
if i - k <= dict.get(v):
return True
dict[v] = i
return False
方法三:性能45ms
class Solution(object):
def containsNearbyDuplicate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: bool
"""
if len(nums) == len(set(nums)):
return False
else:
values = {}
for pos, val in enumerate(nums):
if (val in values) and (pos - values[val] <=k):
return True
else:
values[val] = pos
return False