首页 > 其他分享 >2022-8-20 剑指offer-滑动窗口+(桶排序或者有序集合)

2022-8-20 剑指offer-滑动窗口+(桶排序或者有序集合)

时间:2022-08-20 10:45:44浏览次数:87  
标签:20 nums int offer abs 2022 滑动 排序

剑指 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

相关文章