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
代码
Approach #1 Naive Linear Search
classSolution {publicbooleancontainsNearbyDuplicate(int[] nums,int k) {for (int i =0; i <nums.length; i++) {for (int j = i +1; j <Math.min(i + k +1,nums.length); j++) {if (nums[i] == nums[j]) returntrue; } }returnfalse; }}
Approach #2 (Hash Table)
classSolution {publicbooleancontainsNearbyDuplicate(int[] nums,int k) {Set<Integer> set =newHashSet<>();for (int i =0; i <nums.length; ++i) {if (set.contains(nums[i])) returntrue;set.add(nums[i]);if (set.size() > k) {set.remove(nums[i - k]); } }returnfalse; }}