Skip to content

Commit 6066d15

Browse files
committed
feat: add solutions to lc problem: No.1630. Arithmetic Subarrays
1 parent e9246f2 commit 6066d15

File tree

9 files changed

+397
-13
lines changed

9 files changed

+397
-13
lines changed

solution/1600-1699/1630.Arithmetic Subarrays/README.md

+132-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
<li><code>-10<sup>5</sup> &lt;= nums[i] &lt;= 10<sup>5</sup></code></li>
5454
</ul>
5555

56-
5756
## 解法
5857

5958
<!-- 这里可写通用的实现逻辑 -->
@@ -65,15 +64,146 @@
6564
<!-- 这里可写当前语言的特殊实现逻辑 -->
6665

6766
```python
68-
67+
class Solution:
68+
def checkArithmeticSubarrays(self, nums: List[int], l: List[int], r: List[int]) -> List[bool]:
69+
def check(nums, l, r):
70+
if r - l < 2:
71+
return True
72+
s = set(nums[l: r + 1])
73+
mx = max(nums[l: r + 1])
74+
mi = min(nums[l: r + 1])
75+
if (mx - mi) % (r - l) != 0:
76+
return False
77+
delta = (mx - mi) / (r - l)
78+
for i in range(1, r - l + 1):
79+
if (mi + delta * i) not in s:
80+
return False
81+
return True
82+
83+
return [check(nums, l[i], r[i]) for i in range(len(l))]
6984
```
7085

7186
### **Java**
7287

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

7590
```java
91+
class Solution {
92+
public List<Boolean> checkArithmeticSubarrays(int[] nums, int[] l, int[] r) {
93+
List<Boolean> res = new ArrayList<>();
94+
for (int i = 0; i < l.length; ++i) {
95+
res.add(check(nums, l[i], r[i]));
96+
}
97+
return res;
98+
}
99+
100+
private boolean check(int[] nums, int l, int r) {
101+
if (r - l < 2) {
102+
return true;
103+
}
104+
Set<Integer> s = new HashSet<>();
105+
int mx = Integer.MIN_VALUE;
106+
int mi = Integer.MAX_VALUE;
107+
for (int i = l; i <= r; ++i) {
108+
s.add(nums[i]);
109+
mx = Math.max(mx, nums[i]);
110+
mi = Math.min(mi, nums[i]);
111+
}
112+
if ((mx - mi) % (r - l) != 0) {
113+
return false;
114+
}
115+
int delta = (mx - mi) / (r - l);
116+
for (int i = 1; i <= r - l; ++i) {
117+
if (!s.contains(mi + delta * i)) {
118+
return false;
119+
}
120+
}
121+
return true;
122+
}
123+
}
124+
```
125+
126+
### **C++**
127+
128+
```cpp
129+
class Solution {
130+
public:
131+
vector<bool> checkArithmeticSubarrays(vector<int>& nums, vector<int>& l, vector<int>& r) {
132+
vector<bool> res;
133+
for (int i = 0; i < l.size(); ++i) {
134+
res.push_back(check(nums, l[i], r[i]));
135+
}
136+
return res;
137+
}
138+
139+
bool check(vector<int>& nums, int l, int r) {
140+
if (r - l < 2) return true;
141+
unordered_set<int> s;
142+
int mx = -100010;
143+
int mi = 100010;
144+
for (int i = l; i <= r; ++i) {
145+
s.insert(nums[i]);
146+
mx = max(mx, nums[i]);
147+
mi = min(mi, nums[i]);
148+
}
149+
if ((mx - mi) % (r - l) != 0) return false;
150+
int delta = (mx - mi) / (r - l);
151+
for (int i = 1; i <= r - l; ++i) {
152+
if (!s.count(mi + delta * i)) return false;
153+
}
154+
return true;
155+
}
156+
};
157+
```
76158

159+
### **Go**
160+
161+
```go
162+
func checkArithmeticSubarrays(nums []int, l []int, r []int) []bool {
163+
n := len(l)
164+
var res []bool
165+
for i := 0; i < n; i++ {
166+
res = append(res, check(nums, l[i], r[i]))
167+
}
168+
return res
169+
}
170+
171+
func check(nums []int, l, r int) bool {
172+
if r-l < 2 {
173+
return true
174+
}
175+
s := make(map[int]bool)
176+
mx, mi := -100010, 100010
177+
for i := l; i <= r; i++ {
178+
s[nums[i]] = true
179+
mx = max(mx, nums[i])
180+
mi = min(mi, nums[i])
181+
}
182+
if (mx-mi)%(r-l) != 0 {
183+
return false
184+
}
185+
delta := (mx - mi) / (r - l)
186+
for i := 1; i <= r-l; i++ {
187+
if !s[mi+delta*i] {
188+
return false
189+
}
190+
}
191+
return true
192+
}
193+
194+
func max(a, b int) int {
195+
if a > b {
196+
return a
197+
}
198+
return b
199+
}
200+
201+
func min(a, b int) int {
202+
if a < b {
203+
return a
204+
}
205+
return b
206+
}
77207
```
78208

79209
### **...**

solution/1600-1699/1630.Arithmetic Subarrays/README_EN.md

+132-2
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,151 @@ In the 2<sup>nd</sup> query, the subarray is <code>[5,9,3,7]. This</code> can be
5353
<li><code>-10<sup>5</sup> &lt;= nums[i] &lt;= 10<sup>5</sup></code></li>
5454
</ul>
5555

56-
5756
## Solutions
5857

5958
<!-- tabs:start -->
6059

6160
### **Python3**
6261

6362
```python
64-
63+
class Solution:
64+
def checkArithmeticSubarrays(self, nums: List[int], l: List[int], r: List[int]) -> List[bool]:
65+
def check(nums, l, r):
66+
if r - l < 2:
67+
return True
68+
s = set(nums[l: r + 1])
69+
mx = max(nums[l: r + 1])
70+
mi = min(nums[l: r + 1])
71+
if (mx - mi) % (r - l) != 0:
72+
return False
73+
delta = (mx - mi) / (r - l)
74+
for i in range(1, r - l + 1):
75+
if (mi + delta * i) not in s:
76+
return False
77+
return True
78+
79+
return [check(nums, l[i], r[i]) for i in range(len(l))]
6580
```
6681

6782
### **Java**
6883

6984
```java
85+
class Solution {
86+
public List<Boolean> checkArithmeticSubarrays(int[] nums, int[] l, int[] r) {
87+
List<Boolean> res = new ArrayList<>();
88+
for (int i = 0; i < l.length; ++i) {
89+
res.add(check(nums, l[i], r[i]));
90+
}
91+
return res;
92+
}
93+
94+
private boolean check(int[] nums, int l, int r) {
95+
if (r - l < 2) {
96+
return true;
97+
}
98+
Set<Integer> s = new HashSet<>();
99+
int mx = Integer.MIN_VALUE;
100+
int mi = Integer.MAX_VALUE;
101+
for (int i = l; i <= r; ++i) {
102+
s.add(nums[i]);
103+
mx = Math.max(mx, nums[i]);
104+
mi = Math.min(mi, nums[i]);
105+
}
106+
if ((mx - mi) % (r - l) != 0) {
107+
return false;
108+
}
109+
int delta = (mx - mi) / (r - l);
110+
for (int i = 1; i <= r - l; ++i) {
111+
if (!s.contains(mi + delta * i)) {
112+
return false;
113+
}
114+
}
115+
return true;
116+
}
117+
}
118+
```
119+
120+
### **C++**
121+
122+
```cpp
123+
class Solution {
124+
public:
125+
vector<bool> checkArithmeticSubarrays(vector<int>& nums, vector<int>& l, vector<int>& r) {
126+
vector<bool> res;
127+
for (int i = 0; i < l.size(); ++i) {
128+
res.push_back(check(nums, l[i], r[i]));
129+
}
130+
return res;
131+
}
132+
133+
bool check(vector<int>& nums, int l, int r) {
134+
if (r - l < 2) return true;
135+
unordered_set<int> s;
136+
int mx = -100010;
137+
int mi = 100010;
138+
for (int i = l; i <= r; ++i) {
139+
s.insert(nums[i]);
140+
mx = max(mx, nums[i]);
141+
mi = min(mi, nums[i]);
142+
}
143+
if ((mx - mi) % (r - l) != 0) return false;
144+
int delta = (mx - mi) / (r - l);
145+
for (int i = 1; i <= r - l; ++i) {
146+
if (!s.count(mi + delta * i)) return false;
147+
}
148+
return true;
149+
}
150+
};
151+
```
70152

153+
### **Go**
154+
155+
```go
156+
func checkArithmeticSubarrays(nums []int, l []int, r []int) []bool {
157+
n := len(l)
158+
var res []bool
159+
for i := 0; i < n; i++ {
160+
res = append(res, check(nums, l[i], r[i]))
161+
}
162+
return res
163+
}
164+
165+
func check(nums []int, l, r int) bool {
166+
if r-l < 2 {
167+
return true
168+
}
169+
s := make(map[int]bool)
170+
mx, mi := -100010, 100010
171+
for i := l; i <= r; i++ {
172+
s[nums[i]] = true
173+
mx = max(mx, nums[i])
174+
mi = min(mi, nums[i])
175+
}
176+
if (mx-mi)%(r-l) != 0 {
177+
return false
178+
}
179+
delta := (mx - mi) / (r - l)
180+
for i := 1; i <= r-l; i++ {
181+
if !s[mi+delta*i] {
182+
return false
183+
}
184+
}
185+
return true
186+
}
187+
188+
func max(a, b int) int {
189+
if a > b {
190+
return a
191+
}
192+
return b
193+
}
194+
195+
func min(a, b int) int {
196+
if a < b {
197+
return a
198+
}
199+
return b
200+
}
71201
```
72202

73203
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
class Solution {
2+
public:
3+
vector<bool> checkArithmeticSubarrays(vector<int>& nums, vector<int>& l, vector<int>& r) {
4+
vector<bool> res;
5+
for (int i = 0; i < l.size(); ++i) {
6+
res.push_back(check(nums, l[i], r[i]));
7+
}
8+
return res;
9+
}
10+
11+
bool check(vector<int>& nums, int l, int r) {
12+
if (r - l < 2) return true;
13+
unordered_set<int> s;
14+
int mx = -100010;
15+
int mi = 100010;
16+
for (int i = l; i <= r; ++i) {
17+
s.insert(nums[i]);
18+
mx = max(mx, nums[i]);
19+
mi = min(mi, nums[i]);
20+
}
21+
if ((mx - mi) % (r - l) != 0) return false;
22+
int delta = (mx - mi) / (r - l);
23+
for (int i = 1; i <= r - l; ++i) {
24+
if (!s.count(mi + delta * i)) return false;
25+
}
26+
return true;
27+
}
28+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
func checkArithmeticSubarrays(nums []int, l []int, r []int) []bool {
2+
n := len(l)
3+
var res []bool
4+
for i := 0; i < n; i++ {
5+
res = append(res, check(nums, l[i], r[i]))
6+
}
7+
return res
8+
}
9+
10+
func check(nums []int, l, r int) bool {
11+
if r-l < 2 {
12+
return true
13+
}
14+
s := make(map[int]bool)
15+
mx, mi := -100010, 100010
16+
for i := l; i <= r; i++ {
17+
s[nums[i]] = true
18+
mx = max(mx, nums[i])
19+
mi = min(mi, nums[i])
20+
}
21+
if (mx-mi)%(r-l) != 0 {
22+
return false
23+
}
24+
delta := (mx - mi) / (r - l)
25+
for i := 1; i <= r-l; i++ {
26+
if !s[mi+delta*i] {
27+
return false
28+
}
29+
}
30+
return true
31+
}
32+
33+
func max(a, b int) int {
34+
if a > b {
35+
return a
36+
}
37+
return b
38+
}
39+
40+
func min(a, b int) int {
41+
if a < b {
42+
return a
43+
}
44+
return b
45+
}

0 commit comments

Comments
 (0)