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.
方法1:暴力解法
代码如下:
public class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { int len=nums.length; for(int i=0;i<len;i++){ for(int tmp=1;tmp<=k && i+tmp<len;tmp++) if(nums[i]==nums[i+tmp]) return true; } return false; } }
运行超时:
方法2:分析:
代码如下:
public class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { Set<Integer> set = new HashSet<Integer>(); int start = 0, end = 0; for(int i = 0; i < nums.length; i++){ if(!set.contains(nums[i])){ set.add(nums[i]); end++; } else return true; if(end - start > k) { set.remove(nums[start]); start++; } } return false; } }
运行结果: