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