[LeetCode] 219. 存在重复元素 II
题目链接:https://leetcode-cn.com/problems/contains-duplicate-ii/
题目描述:
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。
示例:
示例 1:
输入: nums = [1,2,3,1], k = 3
输出: true
示例 2:
输入: nums = [1,0,1,1], k = 1
输出: true
示例 3:
输入: nums = [1,2,3,1,2,3], k = 2
输出: false
思路:
只要数组里存在,两个相同的数的索引号相差小于等于k,返回 true
class Solution:
def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
lookup = {}
# 没有重复元素, 肯定返回False
if len(set(nums)) == len(nums): return False
# 只要有一个重复元素 相差的索引号 <=k 返回True
for idx, num in enumerate(nums):
if num in lookup and idx - lookup[num] <= k:
return True
lookup[num] = idx
return False