• LeetCode220. 存在重复元素 III


    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;
        }
    }
  • 相关阅读:
    hdu1754:I Hate It
    hdu1166
    bzoj1642:挤奶时间
    线段树
    bzoj1699:排队
    bzoj3438: 小M的作物
    bzoj2127: happiness
    bzoj2768[JLOI2010]冠军调查
    bzoj1070[SCOI2007]修车
    bzoj1305[CQOI2009]dance跳舞
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14117583.html
Copyright © 2020-2023  润新知