Leetcode219 存在重复元素II 滑动窗口
Posted 牛有肉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode219 存在重复元素II 滑动窗口相关的知识,希望对你有一定的参考价值。
巧用数据结构,空间换时间。
/** * @Author Niuxy * @Date 2020/7/4 11:17 下午 * @Description 朴素解法 O(N * min(K,nums.length-N)) */ public boolean containsNearbyDuplicate0(int[] nums, int k) { for (int i = 0; i < nums.length; i++) { int maxJ = Math.min(nums.length - 1, i + k); for (int j = i + 1; j <= maxJ; j++) { if (nums[i] == nums[j]) { return true; } } } return false; }
/** * @Author Niuxy * @Date 2020/7/4 11:18 下午 * @Description 使用二叉搜索树构建滑动窗口 O(N*logN) */ public boolean containsNearbyDuplicate1(int[] nums, int k) { Set<Integer> window = new TreeSet<Integer>(); for (int i = 0; i < nums.length; i++) { if (window.contains(nums[i])) { return true; } window.add(nums[i]); if (window.size() > k) { window.remove(nums[i - k]); } } return false; }
/** * @Author Niuxy * @Date 2020/7/4 11:22 下午 * @Description 使用哈希表构建滑动窗口 O(N) */ public boolean containsNearbyDuplicate2(int[] nums, int k) { Set<Integer> window = new HashSet<Integer>(); for (int i = 0; i < nums.length; i++) { if (window.contains(nums[i])) { return true; } window.add(nums[i]); if (window.size() > k) { window.remove(nums[i-k]); } } return false; }
以上是关于Leetcode219 存在重复元素II 滑动窗口的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 219: 存在重复元素 IIContains Duplicate II
LeetCode-219. 存在重复元素 II.(java)