[LeetCode]--220. Contains Duplicate III--(Binary Search Tree)

    xiaoxiao2026-03-06  11

    Given an array of integers, find out whether there are two distinct indices i and j in the array such that the difference between nums[i] and nums[j] is at most t and the difference between i and j is at most k.

    Binary Search Tree Solution

    Reference Link We can use the idea—Binary Search Tree whose size is k to solve this problem!

    Time Complexity Analysis

    We know that maintaining a BST of size k is a time complexity of lg(K).

    public class Solution { public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { if (nums == null || nums.length == 0 || k <= 0) { return false; } final TreeSet<Integer> values = new TreeSet<>(); for (int i = 0; i < nums.length; i++) { final Integer floor = values.floor(nums[i] + t); final Integer ceil = values.ceiling(nums[i] - t); // Thanks to the method that floor() and ceiling() if ((floor != null && floor >= nums[i]) || (ceil != null && ceil <= nums[i])) return true; //key idea! values.add(nums[i]); // make sure that the size of BST is k if (i >= k) values.remove(nums[i - k]); } return false; } }

    The link below is the same idea as Binary Search Tree!

    转载请注明原文地址: https://ju.6miu.com/read-1307676.html
    最新回复(0)