Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 72aac94

Browse files
committed
feat: add solutions to lc problem: No.2367
No.2367.Number of Arithmetic Triplets
1 parent 1b8e686 commit 72aac94

File tree

7 files changed

+101
-124
lines changed

7 files changed

+101
-124
lines changed

‎solution/2300-2399/2367.Number of Arithmetic Triplets/README.md‎

Lines changed: 41 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -53,35 +53,24 @@
5353

5454
**方法一:暴力枚举**
5555

56-
直接暴力枚举 $i,ドル $j,ドル $k,ドル统计合法的三元组数目
56+
我们注意到,数组 $nums$ 的长度只有不超过 200ドル,ドル因此可以直接暴力枚举 $i,ドル $j,ドル $k,ドル判断是否满足条件,若满足,累加三元组数目
5757

58-
时间复杂度 $O(n^3),ドル空间复杂度 $O(1)$。
58+
时间复杂度 $O(n^3),ドル其中 $n$ 为数组 $nums$ 的长度。空间复杂度 $O(1)$。
5959

60-
**方法二:哈希表**
60+
**方法二:数组或哈希表**
6161

62-
由于 $nums$ 严格递增,那么对于 $nums$ 中的每个元素 $v,ドル判断 $v+diff,ドル $v+diff+diff$ 是否也在 $nums$ 中,若是,累加三元组数目。这里用哈希表实现元素的快速查找
62+
我们可以先将 $nums$ 中的元素存入哈希表或数组 $vis$ 中,然后枚举 $nums$ 中的每个元素 $x,ドル判断 $x+diff,ドル $x+diff+diff$ 是否也在 $vis$ 中,若是,累加三元组数目。
6363

64-
时间复杂度 $O(n),ドル空间复杂度 $O(n)$。
64+
枚举结束后,返回答案。
65+
66+
时间复杂度 $O(n),ドル空间复杂度 $O(n)$。其中 $n$ 为数组 $nums$ 的长度。
6567

6668
<!-- tabs:start -->
6769

6870
### **Python3**
6971

7072
<!-- 这里可写当前语言的特殊实现逻辑 -->
7173

72-
```python
73-
class Solution:
74-
def arithmeticTriplets(self, nums: List[int], diff: int) -> int:
75-
ans = 0
76-
n = len(nums)
77-
for i in range(n):
78-
for j in range(i + 1, n):
79-
for k in range(j + 1, n):
80-
if nums[j] - nums[i] == nums[k] - nums[j] == diff:
81-
ans += 1
82-
return ans
83-
```
84-
8574
```python
8675
class Solution:
8776
def arithmeticTriplets(self, nums: List[int], diff: int) -> int:
@@ -91,8 +80,8 @@ class Solution:
9180
```python
9281
class Solution:
9382
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)
83+
vis = set(nums)
84+
return sum(x + diff in vis and x + diff *2 in vis for x in nums)
9685
```
9786

9887
### **Java**
@@ -121,13 +110,13 @@ class Solution {
121110
```java
122111
class Solution {
123112
public int arithmeticTriplets(int[] nums, int diff) {
124-
boolean[] vis = new boolean[310];
125-
for (int v : nums) {
126-
vis[v] = true;
113+
boolean[] vis = new boolean[301];
114+
for (int x : nums) {
115+
vis[x] = true;
127116
}
128117
int ans = 0;
129-
for (int v : nums) {
130-
if (vis[v + diff] && vis[v + diff + diff]) {
118+
for (int x : nums) {
119+
if (vis[x + diff] && vis[x + diff + diff]) {
131120
++ans;
132121
}
133122
}
@@ -162,10 +151,14 @@ public:
162151
class Solution {
163152
public:
164153
int arithmeticTriplets(vector<int>& nums, int diff) {
165-
vector<bool> vis(310);
166-
for (int v : nums) vis[v] = true;
154+
bitset<301> vis;
155+
for (int x : nums) {
156+
vis[x] = 1;
157+
}
167158
int ans = 0;
168-
for (int v : nums) ans += vis[v + diff] && vis[v + diff + diff];
159+
for (int x : nums) {
160+
ans += vis[x + diff] && vis[x + diff + diff];
161+
}
169162
return ans;
170163
}
171164
};
@@ -174,8 +167,7 @@ public:
174167
### **Go**
175168

176169
```go
177-
func arithmeticTriplets(nums []int, diff int) int {
178-
ans := 0
170+
func arithmeticTriplets(nums []int, diff int) (ans int) {
179171
n := len(nums)
180172
for i := 0; i < n; i++ {
181173
for j := i + 1; j < n; j++ {
@@ -186,57 +178,53 @@ func arithmeticTriplets(nums []int, diff int) int {
186178
}
187179
}
188180
}
189-
return ans
181+
return
190182
}
191183
```
192184

193185
```go
194-
func arithmeticTriplets(nums []int, diff int) int {
195-
vis := make([]bool, 310)
196-
for _, v := range nums {
197-
vis[v] = true
186+
func arithmeticTriplets(nums []int, diff int) (ansint) {
187+
vis := [301]bool{}
188+
for _, x := range nums {
189+
vis[x] = true
198190
}
199-
ans := 0
200-
for _, v := range nums {
201-
if vis[v+diff] && vis[v+diff+diff] {
191+
for _, x := range nums {
192+
if vis[x+diff] && vis[x+diff+diff] {
202193
ans++
203194
}
204195
}
205-
return ans
196+
return
206197
}
207198
```
208199

209200
### **TypeScript**
210201

211202
```ts
212203
function arithmeticTriplets(nums: number[], diff: number): number {
213-
let res = 0;
214204
const n = nums.length;
215-
for (let i = 0; i < n - 2; i++) {
216-
for (let j = i + 1; j < n - 1; j++) {
217-
for (let k = j + 1; k < n; k++) {
218-
if (nums[k] - nums[j] > diff) {
219-
break;
220-
}
205+
let ans = 0;
206+
for (let i = 0; i < n; ++i) {
207+
for (let j = i + 1; j < n; ++j) {
208+
for (let k = j + 1; k < n; ++k) {
221209
if (nums[j] - nums[i] === diff && nums[k] - nums[j] === diff) {
222-
res++;
210+
++ans;
223211
}
224212
}
225213
}
226214
}
227-
return res;
215+
return ans;
228216
}
229217
```
230218

231219
```ts
232220
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;
221+
const vis:boolean[] = new Array(301).fill(false);
222+
for (const x of nums) {
223+
vis[x] = true;
236224
}
237225
let ans = 0;
238-
for (const v of nums) {
239-
if (vis[v + diff] && vis[v + diff + diff]) {
226+
for (const x of nums) {
227+
if (vis[x + diff] && vis[x + diff + diff]) {
240228
++ans;
241229
}
242230
}

‎solution/2300-2399/2367.Number of Arithmetic Triplets/README_EN.md‎

Lines changed: 34 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -51,19 +51,6 @@
5151

5252
### **Python3**
5353

54-
```python
55-
class Solution:
56-
def arithmeticTriplets(self, nums: List[int], diff: int) -> int:
57-
ans = 0
58-
n = len(nums)
59-
for i in range(n):
60-
for j in range(i + 1, n):
61-
for k in range(j + 1, n):
62-
if nums[j] - nums[i] == nums[k] - nums[j] == diff:
63-
ans += 1
64-
return ans
65-
```
66-
6754
```python
6855
class Solution:
6956
def arithmeticTriplets(self, nums: List[int], diff: int) -> int:
@@ -73,8 +60,8 @@ class Solution:
7360
```python
7461
class Solution:
7562
def arithmeticTriplets(self, nums: List[int], diff: int) -> int:
76-
s = set(nums)
77-
return sum(v + diff in s and v + diff + diff in s for v in nums)
63+
vis = set(nums)
64+
return sum(x + diff in vis and x + diff *2 in vis for x in nums)
7865
```
7966

8067
### **Java**
@@ -101,13 +88,13 @@ class Solution {
10188
```java
10289
class Solution {
10390
public int arithmeticTriplets(int[] nums, int diff) {
104-
boolean[] vis = new boolean[310];
105-
for (int v : nums) {
106-
vis[v] = true;
91+
boolean[] vis = new boolean[301];
92+
for (int x : nums) {
93+
vis[x] = true;
10794
}
10895
int ans = 0;
109-
for (int v : nums) {
110-
if (vis[v + diff] && vis[v + diff + diff]) {
96+
for (int x : nums) {
97+
if (vis[x + diff] && vis[x + diff + diff]) {
11198
++ans;
11299
}
113100
}
@@ -142,10 +129,14 @@ public:
142129
class Solution {
143130
public:
144131
int arithmeticTriplets(vector<int>& nums, int diff) {
145-
vector<bool> vis(310);
146-
for (int v : nums) vis[v] = true;
132+
bitset<301> vis;
133+
for (int x : nums) {
134+
vis[x] = 1;
135+
}
147136
int ans = 0;
148-
for (int v : nums) ans += vis[v + diff] && vis[v + diff + diff];
137+
for (int x : nums) {
138+
ans += vis[x + diff] && vis[x + diff + diff];
139+
}
149140
return ans;
150141
}
151142
};
@@ -154,8 +145,7 @@ public:
154145
### **Go**
155146

156147
```go
157-
func arithmeticTriplets(nums []int, diff int) int {
158-
ans := 0
148+
func arithmeticTriplets(nums []int, diff int) (ans int) {
159149
n := len(nums)
160150
for i := 0; i < n; i++ {
161151
for j := i + 1; j < n; j++ {
@@ -166,57 +156,53 @@ func arithmeticTriplets(nums []int, diff int) int {
166156
}
167157
}
168158
}
169-
return ans
159+
return
170160
}
171161
```
172162

173163
```go
174-
func arithmeticTriplets(nums []int, diff int) int {
175-
vis := make([]bool, 310)
176-
for _, v := range nums {
177-
vis[v] = true
164+
func arithmeticTriplets(nums []int, diff int) (ansint) {
165+
vis := [301]bool{}
166+
for _, x := range nums {
167+
vis[x] = true
178168
}
179-
ans := 0
180-
for _, v := range nums {
181-
if vis[v+diff] && vis[v+diff+diff] {
169+
for _, x := range nums {
170+
if vis[x+diff] && vis[x+diff+diff] {
182171
ans++
183172
}
184173
}
185-
return ans
174+
return
186175
}
187176
```
188177

189178
### **TypeScript**
190179

191180
```ts
192181
function arithmeticTriplets(nums: number[], diff: number): number {
193-
let res = 0;
194182
const n = nums.length;
195-
for (let i = 0; i < n - 2; i++) {
196-
for (let j = i + 1; j < n - 1; j++) {
197-
for (let k = j + 1; k < n; k++) {
198-
if (nums[k] - nums[j] > diff) {
199-
break;
200-
}
183+
let ans = 0;
184+
for (let i = 0; i < n; ++i) {
185+
for (let j = i + 1; j < n; ++j) {
186+
for (let k = j + 1; k < n; ++k) {
201187
if (nums[j] - nums[i] === diff && nums[k] - nums[j] === diff) {
202-
res++;
188+
++ans;
203189
}
204190
}
205191
}
206192
}
207-
return res;
193+
return ans;
208194
}
209195
```
210196

211197
```ts
212198
function arithmeticTriplets(nums: number[], diff: number): number {
213-
let vis= new Array(310).fill(false);
214-
for (const v of nums) {
215-
vis[v] = true;
199+
const vis:boolean[] = new Array(301).fill(false);
200+
for (const x of nums) {
201+
vis[x] = true;
216202
}
217203
let ans = 0;
218-
for (const v of nums) {
219-
if (vis[v + diff] && vis[v + diff + diff]) {
204+
for (const x of nums) {
205+
if (vis[x + diff] && vis[x + diff + diff]) {
220206
++ans;
221207
}
222208
}
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
class Solution {
22
public:
33
int arithmeticTriplets(vector<int>& nums, int diff) {
4-
vector<bool> vis(310);
5-
for (int v : nums) vis[v] = true;
4+
bitset<301> vis;
5+
for (int x : nums) {
6+
vis[x] = 1;
7+
}
68
int ans = 0;
7-
for (int v : nums) ans += vis[v + diff] && vis[v + diff + diff];
9+
for (int x : nums) {
10+
ans += vis[x + diff] && vis[x + diff + diff];
11+
}
812
return ans;
913
}
1014
};
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1-
func arithmeticTriplets(nums []int, diff int) int {
2-
vis := make([]bool, 310)
3-
for _, v := range nums {
4-
vis[v] = true
1+
func arithmeticTriplets(nums []int, diff int) (ansint) {
2+
vis := [301]bool{}
3+
for _, x := range nums {
4+
vis[x] = true
55
}
6-
ans := 0
7-
for _, v := range nums {
8-
if vis[v+diff] && vis[v+diff+diff] {
6+
for _, x := range nums {
7+
if vis[x+diff] && vis[x+diff+diff] {
98
ans++
109
}
1110
}
12-
returnans
11+
return
1312
}

‎solution/2300-2399/2367.Number of Arithmetic Triplets/Solution.java‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
class Solution {
22
public int arithmeticTriplets(int[] nums, int diff) {
3-
boolean[] vis = new boolean[310];
4-
for (int v : nums) {
5-
vis[v] = true;
3+
boolean[] vis = new boolean[301];
4+
for (int x : nums) {
5+
vis[x] = true;
66
}
77
int ans = 0;
8-
for (int v : nums) {
9-
if (vis[v + diff] && vis[v + diff + diff]) {
8+
for (int x : nums) {
9+
if (vis[x + diff] && vis[x + diff + diff]) {
1010
++ans;
1111
}
1212
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
class Solution:
22
def arithmeticTriplets(self, nums: List[int], diff: int) -> int:
3-
s = set(nums)
4-
return sum(v + diff in s and v + diff +diff in s for v in nums)
3+
vis = set(nums)
4+
return sum(x + diff in vis and x + diff *2 in vis for x in nums)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /