这两道题都是让我们找到数组中是否有重复的数字,这种查找题首先就要考虑hash查找了,毕竟快。
217这道直接用dict就好,出现超过两次直接返回即可。
class Solution(object):
def containsDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
if len(nums) <=1 :
return False
temp = dict()
for num in nums:
if temp.has_key(num):
temp[num] += 1
if temp[num] >=2:
return True
else:
temp[num] = 1
return False
219除了要找到两个相同的数以外,还要求这两个数的index差值不超过k,其实还是用hash,这不过此时的value不能再存出现的次数,而是要记录index,这里要注意一旦两个相同的数出现,但是index超出了k,那么我们要更新这个value,使之成为最新的index,因为不更新的话再出现相同的数字,只会差值越大。
class Solution(object):
def containsNearbyDuplicate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: bool
"""
if len(nums) < 2:
return False
temp = dict()
for i in range(len(nums)):
if temp.has_key(nums[i]):
if i - temp[nums[i]] <= k:
return True
else:
temp[nums[i]] = i
else:
temp[nums[i]] = i
return False