1 题目描述
Given an array of integers and an integer k, find out whether there there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between iand j is at most k.
题目出处:https://leetcode.com/problems/contains-duplicate-ii/
2 解题思路
1.题意:在|i - j| <= k的条件下,判断是否存在nums[i] = nums[j]。
2采取的方法是:设置起始和结束标记:start与end。对于每个元素,如果在前k个元素中有,则退出;如果没有则加入,并调整start与end。
3 源代码
package com.larry.easy;
import java.util.HashSet;
public class ContainsDuplicateII {
public boolean containsNearbyDuplicate(int[] nums, int k) {
HashSet<Integer> hs = new HashSet<Integer>();
int start = 0, end = 0;
for(int i = 0; i < nums.length; i++){
boolean conts = hs.contains(nums[i]);
if(conts) return true;
else{
hs.add(nums[i]);
end++;
if(end - start > k) {
hs.remove(nums[start]);
start++;
}
}
}
return false;
}
}