题目:
给出一个整型数组nums和一个整数k,是否存在索引i和j,使得nums[i] == nums[j],且i和j之间的差不超过k。
方法一:
暴力法,枚举所有:O(n^2)
方法二:
滑动窗口+查找表
方法二代码:
package com.haobi;
import java.util.HashMap;
import java.util.Map;
public class ContainsDuplicateII {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,3,8,9,10};
int k = 5;
System.out.println(containsNearbyDuplicate(arr, k));
}
public static boolean containsNearbyDuplicate(int[] nums, int k) {
Map<Integer, Integer> record = new HashMap<>();
for(int i=0;i<nums.length;i++) {
//如果查找表中存在该元素
if(record.containsKey(nums[i])) {
return true;
}
//将元素插入查找表
record.put(nums[i], 1);
//判断滑动窗口的长度
//保持record中最多有K个元素
if(record.size() == k+1) {
record.remove(nums[i-k]);
}
}
return false;
}
}