# 219. Contains Duplicate II 存在重复元素 II

@TOC

## # 题目描述

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`.

Example 1:

``````Input: nums = [1,2,3,1], k = 3
Output: true
``````

Example 2:

``````Input: nums = [1,0,1,1], k = 1
Output: true
``````

Example 3:

``````Input: nums = [1,2,3,1,2,3], k = 2
Output: false
``````

## # 解题方法

### # 使用set

``````class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i < nums.length; i++){
if(i > k) set.remove(nums[i - k - 1]);
if(!set.add(nums[i])) return true;
}
return false;
}
}
``````

### # 使用字典

``````class Solution(object):
def containsNearbyDuplicate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: bool
"""
d = dict()
for i, num in enumerate(nums):
if num in d:
if i - d[num] <= k:
return True
d[num] = i
return False
``````

## # 日期

2017 年 8 月 18 日 2018 年 11 月 24 日 —— 周六快乐