29
29
30
30
这个题目和我们上面那个数组中的重复数字几乎相同,只不过是增加了一个判断相隔是否小于K位的条件,我们先用 HashMap 来做一哈,和刚才思路一致,我们直接看代码就能整懂
31
31
32
+ Java Code:
33
+
32
34
``` java
33
35
class Solution {
34
36
public boolean containsNearbyDuplicate (int [] nums , int k ) {
@@ -41,9 +43,9 @@ class Solution {
41
43
for (int i = 0 ; i < nums. length; i++ ) {
42
44
// 如果含有
43
45
if (map. containsKey(nums[i])) {
44
- // 判断是否小于K,如果小于则直接返回
46
+ // 判断是否小于K,如果小于等于则直接返回
45
47
int abs = Math . abs(i - map. get(nums[i]));
46
- if (abs <= k) return true ;// 小于则返回
48
+ if (abs <= k) return true ;// 小于等于则返回
47
49
}
48
50
// 更新索引,此时有两种情况,不存在,或者存在时,将后出现的索引保存
49
51
map. put(nums[i],i);
@@ -53,6 +55,29 @@ class Solution {
53
55
}
54
56
```
55
57
58
+ Python3 Code:
59
+
60
+ ``` python
61
+ from typing import List
62
+ class Solution :
63
+ def containsNearbyDuplicate (self , nums : List[int ], k : int )->bool :
64
+ # 特殊情况
65
+ if len (nums) == 0 :
66
+ return False
67
+ # 字典
68
+ m = {}
69
+ for i in range (0 , len (nums)):
70
+ # 如果含有
71
+ if nums[i] in m.keys():
72
+ # 判断是否小于K,如果小于等于则直接返回
73
+ a = abs (i - m[nums[i]])
74
+ if a <= k:
75
+ return True # 小于等于则返回
76
+ # 更新索引,此时有两种情况,不存在,或者存在时,将后出现的索引保存
77
+ m[nums[i]] = i
78
+ return False
79
+ ```
80
+
56
81
** HashSet**
57
82
58
83
** 解析**
@@ -65,6 +90,8 @@ class Solution {
65
90
66
91
** 题目代码**
67
92
93
+ Java Code
94
+
68
95
``` java
69
96
class Solution {
70
97
public boolean containsNearbyDuplicate (int [] nums , int k ) {
@@ -91,3 +118,25 @@ class Solution {
91
118
}
92
119
```
93
120
121
+ Python3 Code:
122
+
123
+ ``` python
124
+ from typing import List
125
+ class Solution :
126
+ def containsNearbyDuplicate (self , nums : List[int ], k : int )->bool :
127
+ # 特殊情况
128
+ if len (nums) == 0 :
129
+ return False
130
+ # 集合
131
+ s = set ()
132
+ for i in range (0 , len (nums)):
133
+ # 如果含有,返回True
134
+ if nums[i] in s:
135
+ return True
136
+ # 添加新元素
137
+ s.add(nums[i])
138
+ # 维护窗口长度
139
+ if len (s) > k:
140
+ s.remove(nums[i - k])
141
+ return False
142
+ ```
0 commit comments