47
47
<li><code>nums</code> <strong>严格</strong> 递增</li>
48
48
</ul >
49
49
50
-
51
50
## 解法
52
51
53
52
<!-- 这里可写通用的实现逻辑 -->
54
53
55
54
** 方法一:暴力枚举**
56
55
56
+ 直接暴力枚举 $i$, $j$, $k$,统计合法的三元组数目。
57
+
58
+ 时间复杂度 $O(n^3)$,空间复杂度 $O(1)$。
59
+
60
+ ** 方法二:哈希表**
61
+
62
+ 由于 $nums$ 严格递增,那么对于 $nums$ 中的每个元素 $v$,判断 $v+diff$, $v+diff+diff$ 是否也在 $nums$ 中,若是,累加三元组数目。这里用哈希表实现元素的快速查找。
63
+
64
+ 时间复杂度 $O(n)$,空间复杂度 $O(n)$。
65
+
57
66
<!-- tabs:start -->
58
67
59
68
### ** Python3**
@@ -73,6 +82,19 @@ class Solution:
73
82
return ans
74
83
```
75
84
85
+ ``` python
86
+ class Solution :
87
+ def arithmeticTriplets (self , nums : List[int ], diff : int ) -> int :
88
+ return sum (b - a == diff and c - b == diff for a, b, c in combinations(nums, 3 ))
89
+ ```
90
+
91
+ ``` python
92
+ class Solution :
93
+ def arithmeticTriplets (self , nums : List[int ], diff : int ) -> int :
94
+ s = set (nums)
95
+ return sum (v + diff in s and v + diff + diff in s for v in nums)
96
+ ```
97
+
76
98
### ** Java**
77
99
78
100
<!-- 这里可写当前语言的特殊实现逻辑 -->
@@ -96,6 +118,24 @@ class Solution {
96
118
}
97
119
```
98
120
121
+ ``` java
122
+ class Solution {
123
+ public int arithmeticTriplets (int [] nums , int diff ) {
124
+ boolean [] vis = new boolean [310 ];
125
+ for (int v : nums) {
126
+ vis[v] = true ;
127
+ }
128
+ int ans = 0 ;
129
+ for (int v : nums) {
130
+ if (vis[v + diff] && vis[v + diff + diff]) {
131
+ ++ ans;
132
+ }
133
+ }
134
+ return ans;
135
+ }
136
+ }
137
+ ```
138
+
99
139
### ** C++**
100
140
101
141
``` cpp
@@ -118,6 +158,19 @@ public:
118
158
};
119
159
```
120
160
161
+ ```cpp
162
+ class Solution {
163
+ public:
164
+ int arithmeticTriplets(vector<int>& nums, int diff) {
165
+ vector<bool> vis(310);
166
+ for (int v : nums) vis[v] = true;
167
+ int ans = 0;
168
+ for (int v : nums) ans += vis[v + diff] && vis[v + diff + diff];
169
+ return ans;
170
+ }
171
+ };
172
+ ```
173
+
121
174
### ** Go**
122
175
123
176
``` go
@@ -137,6 +190,22 @@ func arithmeticTriplets(nums []int, diff int) int {
137
190
}
138
191
```
139
192
193
+ ``` go
194
+ func arithmeticTriplets (nums []int , diff int ) int {
195
+ vis := make ([]bool , 310 )
196
+ for _ , v := range nums {
197
+ vis[v] = true
198
+ }
199
+ ans := 0
200
+ for _ , v := range nums {
201
+ if vis[v+diff] && vis[v+diff+diff] {
202
+ ans++
203
+ }
204
+ }
205
+ return ans
206
+ }
207
+ ```
208
+
140
209
### ** TypeScript**
141
210
142
211
``` ts
@@ -159,6 +228,22 @@ function arithmeticTriplets(nums: number[], diff: number): number {
159
228
}
160
229
```
161
230
231
+ ``` ts
232
+ function arithmeticTriplets(nums : number [], diff : number ): number {
233
+ let vis = new Array (310 ).fill (false );
234
+ for (const v of nums ) {
235
+ vis [v ] = true ;
236
+ }
237
+ let ans = 0 ;
238
+ for (const v of nums ) {
239
+ if (vis [v + diff ] && vis [v + diff + diff ]) {
240
+ ++ ans ;
241
+ }
242
+ }
243
+ return ans ;
244
+ }
245
+ ```
246
+
162
247
### ** ...**
163
248
164
249
```
0 commit comments