Skip to main content

🟡 剑指 Offer II 057. 值和下标之差都在给定的范围内

LeetCode 提示

题目难度 中等

原题链接 🔗 leetcode

题解1#

抄作业1。

思路是 滑动窗口 + 有序集合。Java 的 TreeSet 可以同时支持这两个能力。

强烈推荐 TreeSet.ceiling() 和 TreeSet.floor() 方法

class Solution {    public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {        TreeSet<Long> set = new TreeSet<>();        for (int i=0; i<nums.length; i++) {            Long ceil = set.ceiling((long)nums[i]-(long)t);            if (ceil != null && ceil <= (long)nums[i]+(long)t) {                return true;            }            set.add((long)nums[i]);
            if (i >= k) {                set.remove((long)nums[i-k]);            }        }
        return false;    }}