From 665d24b961582e37990ba7c65baf4d13993c50f2 Mon Sep 17 00:00:00 2001 From: AC_Oier Date: Wed, 19 Jan 2022 09:48:13 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8feat:=20Add=20219?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\345\223\210\345\270\214\350\241\250.md" | 1 + ...21\345\212\250\347\252\227\345\217\243.md" | 1 + ...10\347\256\200\345\215\225\357\274\211.md" | 110 ++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 "LeetCode/211-220/219. \345\255\230\345\234\250\351\207\215\345\244\215\345\205\203\347\264\240 II\357\274\210\347\256\200\345\215\225\357\274\211.md" diff --git "a/Index/\345\223\210\345\270\214\350\241\250.md" "b/Index/\345\223\210\345\270\214\350\241\250.md" index cc2a7af5..7aceac1a 100644 --- "a/Index/\345\223\210\345\270\214\350\241\250.md" +++ "b/Index/\345\223\210\345\270\214\350\241\250.md" @@ -11,6 +11,7 @@ | [149. 直线上最多的点数](https://leetcode-cn.com/problems/max-points-on-a-line/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/max-points-on-a-line/solution/gong-shui-san-xie-liang-chong-mei-ju-zhi-u44s/) | 困难 | 🤩🤩🤩 | | [166. 分数到小数](https://leetcode-cn.com/problems/fraction-to-recurring-decimal/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/fraction-to-recurring-decimal/solution/gong-shui-san-xie-mo-ni-shu-shi-ji-suan-kq8c4/) | 中等 | 🤩🤩🤩🤩 | | [187. 重复的DNA序列](https://leetcode-cn.com/problems/repeated-dna-sequences/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/repeated-dna-sequences/solution/gong-shui-san-xie-yi-ti-shuang-jie-hua-d-30pg/) | 中等 | 🤩🤩🤩🤩 | +| [219. 存在重复元素 II](https://leetcode-cn.com/problems/contains-duplicate-ii/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/contains-duplicate-ii/solution/gong-shui-san-xie-hua-dong-chuang-kou-yu-q02i/) | 中等 | 🤩🤩🤩🤩 | | [229. 求众数 II](https://leetcode-cn.com/problems/majority-element-ii/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/majority-element-ii/solution/gong-shui-san-xie-noxiang-xin-ke-xue-xi-ws0rj/) | 中等 | 🤩🤩🤩🤩 | | [260. 只出现一次的数字 III](https://leetcode-cn.com/problems/single-number-iii/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/single-number-iii/solution/gong-shui-san-xie-yi-ti-shuang-jie-ha-xi-zgi4/) | 中等 | 🤩🤩🤩🤩 | | [268. 丢失的数字](https://leetcode-cn.com/problems/missing-number/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/missing-number/solution/gong-shui-san-xie-yi-ti-wu-jie-pai-xu-ji-te3s/) | 简单 | 🤩🤩🤩🤩 | diff --git "a/Index/\346\273\221\345\212\250\347\252\227\345\217\243.md" "b/Index/\346\273\221\345\212\250\347\252\227\345\217\243.md" index c9f4bcf8..01b5f62a 100644 --- "a/Index/\346\273\221\345\212\250\347\252\227\345\217\243.md" +++ "b/Index/\346\273\221\345\212\250\347\252\227\345\217\243.md" @@ -3,6 +3,7 @@ | [3. 无重复字符的最长子串 ](https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/shua-chuan-lc-shuang-zhi-zhen-ha-xi-biao-q08m/) | 中等 | 🤩🤩🤩🤩🤩 | | [30. 串联所有单词的子串](https://leetcode-cn.com/problems/substring-with-concatenation-of-all-words/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/substring-with-concatenation-of-all-words/solution/shua-chuan-lc-po-su-ha-xi-biao-jie-fa-hu-ml3x/) | 困难 | 🤩🤩 | | [187. 重复的DNA序列](https://leetcode-cn.com/problems/repeated-dna-sequences/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/repeated-dna-sequences/solution/gong-shui-san-xie-yi-ti-shuang-jie-hua-d-30pg/) | 中等 | 🤩🤩🤩🤩 | +| [219. 存在重复元素 II](https://leetcode-cn.com/problems/contains-duplicate-ii/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/contains-duplicate-ii/solution/gong-shui-san-xie-hua-dong-chuang-kou-yu-q02i/) | 中等 | 🤩🤩🤩🤩 | | [220. 存在重复元素 III](https://leetcode-cn.com/problems/contains-duplicate-iii/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/contains-duplicate-iii/solution/gong-shui-san-xie-yi-ti-shuang-jie-hua-d-dlnv/) | 中等 | 🤩🤩🤩 | | [424. 替换后的最长重复字符](https://leetcode-cn.com/problems/longest-repeating-character-replacement/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/longest-repeating-character-replacement/solution/ping-ping-wu-qi-shuang-zhi-zhen-da-bai-h-fgif/) | 中等 | 🤩🤩🤩🤩 | | [438. 找到字符串中所有字母异位词](https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/) | [LeetCode 题解链接](https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/solution/gong-shui-san-xie-shuang-zhi-zhen-shi-xi-t5hc/) | 中等 | 🤩🤩🤩🤩 | diff --git "a/LeetCode/211-220/219. \345\255\230\345\234\250\351\207\215\345\244\215\345\205\203\347\264\240 II\357\274\210\347\256\200\345\215\225\357\274\211.md" "b/LeetCode/211-220/219. \345\255\230\345\234\250\351\207\215\345\244\215\345\205\203\347\264\240 II\357\274\210\347\256\200\345\215\225\357\274\211.md" new file mode 100644 index 00000000..8423e9ed --- /dev/null +++ "b/LeetCode/211-220/219. \345\255\230\345\234\250\351\207\215\345\244\215\345\205\203\347\264\240 II\357\274\210\347\256\200\345\215\225\357\274\211.md" @@ -0,0 +1,110 @@ +### 题目描述 + +这是 LeetCode 上的 **[219. 存在重复元素 II](https://leetcode-cn.com/problems/contains-duplicate-ii/solution/gong-shui-san-xie-hua-dong-chuang-kou-yu-q02i/)** ,难度为 **简单**。 + +Tag : 「滑动窗口」、「哈希表」 + + + +给你一个整数数组 `nums` 和一个整数 `k` ,判断数组中是否存在两个 不同的索引 `i` 和 `j` ,满足 `nums[i] == nums[j]` 且 `abs(i - j) <= k` 。如果存在,返回 `true` ;否则,返回 `false` 。 + +示例 1: +``` +输入:nums = [1,2,3,1], k = 3 + +输出:true +``` +示例 2: +``` +输入:nums = [1,0,1,1], k = 1 + +输出:true +``` +示例 3: +``` +输入:nums = [1,2,3,1,2,3], k = 2 + +输出:false +``` + +提示: +* $1 <= nums.length <= 10^5$ +* $-10^9 <= nums[i] <= 10^9$ +* $0 <= k <= 10^5$ + +--- + +### 滑动窗口 + 哈希表 + +整理题意:是否存在长度不超过的 $k + 1$ 窗口,窗口内有相同元素。 + +我们可以从前往后遍历 $nums$,同时使用 `Set` 记录遍历当前滑窗内出现过的元素。 + +假设当前遍历的元素为 $nums[i]$: + +* 下标小于等于 $k$(起始滑窗长度还不足 $k + 1$):直接往滑窗加数,即将当前元素加入 `Set` 中; +* 下标大于 $k$:将上一滑窗的左端点元素 $nums[i - k - 1]$ 移除,判断当前滑窗的右端点元素 $nums[i]$ 是否存在 `Set` 中,若存在,返回 `True`,否则将当前元素 $nums[i]$ 加入 `Set` 中。 + +重复上述过程,若整个 $nums$ 处理完后仍未找到,返回 `False`。 + +**代码(感谢 [@Benhao](/u/himymben/) 同学提供的其他语言版本):** +```Java +class Solution { + public boolean containsNearbyDuplicate(int[] nums, int k) { + int n = nums.length; + Set set = new HashSet<>(); + for (int i = 0; i < n; i++) { + if (i > k) set.remove(nums[i - k - 1]); + if (set.contains(nums[i])) return true; + set.add(nums[i]); + } + return false; + } +} +``` +- +```Python3 +class Solution: + def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool: + n = len(nums) + s = set() + for i in range(n): + if i > k: + s.remove(nums[i - k - 1]) + if nums[i] in s: + return True + s.add(nums[i]) + return False +```` +- +```Go +func containsNearbyDuplicate(nums []int, k int) bool { + n := len(nums) + set := map[int]bool{} + for i := 0; i < n; i++ { + if i > k { + set[nums[i - k - 1]] = false + } + if set[nums[i]] { + return true + } + set[nums[i]] = true + } + return false +} +``` +* 时间复杂度:$O(n)$ +* 空间复杂度:$O(k)$ + +--- + +### 最后 + +这是我们「刷穿 LeetCode」系列文章的第 `No.219` 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。 + +在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。 + +为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSource/LogicStack-LeetCode 。 + +在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。 +