LeetCode220. 存在重复元素 III

标签:最大的   lazy   duplicate   重复   return   treeset   空间复杂度   rgb   dup   

技术图片

 

class Solution {
    public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
        /**
         *  本题与219题仅在判断部分有改动
         *  时间复杂度O(nlogn)  空间复杂度O(k)
         */
        TreeSet<Long> set = new TreeSet<>();
        for (int i = 0; i < nums.length; i++) {
            // 需要寻找的元素是在 v-t 和 v+t 之间
            // TreeSet中ceiling(E e)方法返回的是set中大于等于e的元素中最小的元素,
            // floor(E e)方法返回的是set 中小于等于 e 的元素中最大的元素
            // 这两个方法如果没找到返回null. 两个方法复杂度都为 O(logn)
            if (set.ceiling((long)nums[i] - t) != null &&
                    set.ceiling((long)nums[i] - t) <= (long)nums[i] + t) {
                return true;
            }
            /*
            if (set.floor((long)nums[i] + t) != null &&
                    set.floor((long)nums[i] + t) >= (long)nums[i] - t) {
                return true;
            }
            */
            set.add((long)nums[i]);
            if (set.size() == k + 1) {
                set.remove((long)nums[i - k]);
            }
        }
        return false;
    }
}

 

LeetCode220. 存在重复元素 III

标签:最大的   lazy   duplicate   重复   return   treeset   空间复杂度   rgb   dup   

原文地址:https://www.cnblogs.com/HuangYJ/p/14117583.html

版权声明:完美者 发表于 2020-12-18 12:10:35。
转载请注明:LeetCode220. 存在重复元素 III | 完美导航

暂无评论

暂无评论...