剑指 Offer II 057. 值和下标之差都在给定的范围内
难度中等给你一个整数数组 nums
和两个整数 k
和 t
。请你判断是否存在 两个不同下标 i
和 j
,使得 abs(nums[i] - nums[j]) <= t
,同时又满足 abs(i - j) <= k
。
如果存在则返回 true
,不存在返回 false
。
1 class Solution { 2 public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { 3 int n=nums.length; 4 for (int i=0;i<Math.max(n-k,n);i++){ 5 for (int j=i+1;j<=Math.min(i+k,n-1);j++){ 6 long l=nums[i],r=nums[j]; 7 //System.out.print(Math.abs(l-r)); 8 if (Math.abs(l-r)<=t) return true; 9 } 10 } 11 return false; 12 } 13 }
思路:维护一个滑动窗口。
桶排序:根据t+1为间隔分桶,相同桶或者相邻桶可能出现符合的情况。
有序集合:treeset可以利用ceiling和flooring两个函数得到距离当前元素最近的两个值。
标签:20,nums,int,offer,abs,2022,滑动,排序 From: https://www.cnblogs.com/benbicao/p/16607275.html