Skip to content

Commit 665d24b

Browse files
committed
✨feat: Add 219
1 parent 1866cb8 commit 665d24b

File tree

3 files changed

+112
-0
lines changed

3 files changed

+112
-0
lines changed

Index/哈希表.md

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
| [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/) | 困难 | 🤩🤩🤩 |
1212
| [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/) | 中等 | 🤩🤩🤩🤩 |
1313
| [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/) | 中等 | 🤩🤩🤩🤩 |
14+
| [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/) | 中等 | 🤩🤩🤩🤩 |
1415
| [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/) | 中等 | 🤩🤩🤩🤩 |
1516
| [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/) | 中等 | 🤩🤩🤩🤩 |
1617
| [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/) | 简单 | 🤩🤩🤩🤩 |

Index/滑动窗口.md

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
| [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/) | 中等 | 🤩🤩🤩🤩🤩 |
44
| [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/) | 困难 | 🤩🤩 |
55
| [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/) | 中等 | 🤩🤩🤩🤩 |
6+
| [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/) | 中等 | 🤩🤩🤩🤩 |
67
| [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/) | 中等 | 🤩🤩🤩 |
78
| [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/) | 中等 | 🤩🤩🤩🤩 |
89
| [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/) | 中等 | 🤩🤩🤩🤩 |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
### 题目描述
2+
3+
这是 LeetCode 上的 **[219. 存在重复元素 II](https://leetcode-cn.com/problems/contains-duplicate-ii/solution/gong-shui-san-xie-hua-dong-chuang-kou-yu-q02i/)** ,难度为 **简单**
4+
5+
Tag : 「滑动窗口」、「哈希表」
6+
7+
8+
9+
给你一个整数数组 `nums` 和一个整数 `k` ,判断数组中是否存在两个 不同的索引 `i` 和 `j` ,满足 `nums[i] == nums[j]``abs(i - j) <= k` 。如果存在,返回 `true` ;否则,返回 `false`
10+
11+
示例 1:
12+
```
13+
输入:nums = [1,2,3,1], k = 3
14+
15+
输出:true
16+
```
17+
示例 2:
18+
```
19+
输入:nums = [1,0,1,1], k = 1
20+
21+
输出:true
22+
```
23+
示例 3:
24+
```
25+
输入:nums = [1,2,3,1,2,3], k = 2
26+
27+
输出:false
28+
```
29+
30+
提示:
31+
* $1 <= nums.length <= 10^5$
32+
* $-10^9 <= nums[i] <= 10^9$
33+
* $0 <= k <= 10^5$
34+
35+
---
36+
37+
### 滑动窗口 + 哈希表
38+
39+
整理题意:是否存在长度不超过的 $k + 1$ 窗口,窗口内有相同元素。
40+
41+
我们可以从前往后遍历 $nums$,同时使用 `Set` 记录遍历当前滑窗内出现过的元素。
42+
43+
假设当前遍历的元素为 $nums[i]$:
44+
45+
* 下标小于等于 $k$(起始滑窗长度还不足 $k + 1$):直接往滑窗加数,即将当前元素加入 `Set` 中;
46+
* 下标大于 $k$:将上一滑窗的左端点元素 $nums[i - k - 1]$ 移除,判断当前滑窗的右端点元素 $nums[i]$ 是否存在 `Set` 中,若存在,返回 `True`,否则将当前元素 $nums[i]$ 加入 `Set` 中。
47+
48+
重复上述过程,若整个 $nums$ 处理完后仍未找到,返回 `False`
49+
50+
**代码(感谢 [@Benhao](/u/himymben/) 同学提供的其他语言版本):**
51+
```Java
52+
class Solution {
53+
public boolean containsNearbyDuplicate(int[] nums, int k) {
54+
int n = nums.length;
55+
Set<Integer> set = new HashSet<>();
56+
for (int i = 0; i < n; i++) {
57+
if (i > k) set.remove(nums[i - k - 1]);
58+
if (set.contains(nums[i])) return true;
59+
set.add(nums[i]);
60+
}
61+
return false;
62+
}
63+
}
64+
```
65+
-
66+
```Python3
67+
class Solution:
68+
def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
69+
n = len(nums)
70+
s = set()
71+
for i in range(n):
72+
if i > k:
73+
s.remove(nums[i - k - 1])
74+
if nums[i] in s:
75+
return True
76+
s.add(nums[i])
77+
return False
78+
````
79+
-
80+
```Go
81+
func containsNearbyDuplicate(nums []int, k int) bool {
82+
n := len(nums)
83+
set := map[int]bool{}
84+
for i := 0; i < n; i++ {
85+
if i > k {
86+
set[nums[i - k - 1]] = false
87+
}
88+
if set[nums[i]] {
89+
return true
90+
}
91+
set[nums[i]] = true
92+
}
93+
return false
94+
}
95+
```
96+
* 时间复杂度:$O(n)$
97+
* 空间复杂度:$O(k)$
98+
99+
---
100+
101+
### 最后
102+
103+
这是我们「刷穿 LeetCode」系列文章的第 `No.219` 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。
104+
105+
在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。
106+
107+
为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSource/LogicStack-LeetCode 。
108+
109+
在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。
110+

0 commit comments

Comments
 (0)