Skip to content

Commit 2157844

Browse files
authored
feat: add solutions to lc problem: No.2145 (#3511)
No.2145.Count the Hidden Sequences
1 parent 01bf266 commit 2157844

File tree

7 files changed

+114
-65
lines changed

7 files changed

+114
-65
lines changed

solution/2100-2199/2145.Count the Hidden Sequences/README.md

+41-21
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,13 @@ tags:
8585

8686
<!-- solution:start -->
8787

88-
### 方法一
88+
### 方法一:前缀和
89+
90+
由于数组 $\textit{differences}$ 已经确定,那么数组 $\textit{hidden}$ 的元素最大值与最小值之差也是固定的,我们只要确保差值不超过 $\textit{upper} - \textit{lower}$ 即可。
91+
92+
我们不妨假设数组 $\textit{hidden}$ 的第一个元素为 $0$,那么 $\textit{hidden}[i] = \textit{hidden}[i - 1] + \textit{differences}[i - 1]$,其中 $1 \leq i \leq n$。记数组 $\textit{hidden}$ 的最大值为 $mx$,最小值为 $mi$,如果 $mx - mi \leq \textit{upper} - \textit{lower}$,那么我们就可以构造出一个合法的 $\textit{hidden}$ 数组,可以构造的个数为 $\textit{upper} - \textit{lower} - (mx - mi) + 1$。否则,无法构造出合法的 $\textit{hidden}$ 数组,返回 $0$。
93+
94+
时间复杂度 $O(n)$,其中 $n$ 是数组 $\textit{differences}$ 的长度。空间复杂度 $O(1)$。
8995

9096
<!-- tabs:start -->
9197

@@ -94,26 +100,26 @@ tags:
94100
```python
95101
class Solution:
96102
def numberOfArrays(self, differences: List[int], lower: int, upper: int) -> int:
97-
num = mi = mx = 0
103+
x = mi = mx = 0
98104
for d in differences:
99-
num += d
100-
mi = min(mi, num)
101-
mx = max(mx, num)
102-
return max(0, upper - lower - (mx - mi) + 1)
105+
x += d
106+
mi = min(mi, x)
107+
mx = max(mx, x)
108+
return max(upper - lower - (mx - mi) + 1, 0)
103109
```
104110

105111
#### Java
106112

107113
```java
108114
class Solution {
109115
public int numberOfArrays(int[] differences, int lower, int upper) {
110-
long num = 0, mi = 0, mx = 0;
116+
long x = 0, mi = 0, mx = 0;
111117
for (int d : differences) {
112-
num += d;
113-
mi = Math.min(mi, num);
114-
mx = Math.max(mx, num);
118+
x += d;
119+
mi = Math.min(mi, x);
120+
mx = Math.max(mx, x);
115121
}
116-
return Math.max(0, (int) (upper - lower - (mx - mi) + 1));
122+
return (int) Math.max(upper - lower - (mx - mi) + 1, 0);
117123
}
118124
}
119125
```
@@ -124,13 +130,13 @@ class Solution {
124130
class Solution {
125131
public:
126132
int numberOfArrays(vector<int>& differences, int lower, int upper) {
127-
long long num = 0, mi = 0, mx = 0;
128-
for (int& d : differences) {
129-
num += d;
130-
mi = min(mi, num);
131-
mx = max(mx, num);
133+
long long x = 0, mi = 0, mx = 0;
134+
for (int d : differences) {
135+
x += d;
136+
mi = min(mi, x);
137+
mx = max(mx, x);
132138
}
133-
return max(0, (int) (upper - lower - (mx - mi) + 1));
139+
return max(upper - lower - (mx - mi) + 1, 0LL);
134140
}
135141
};
136142
```
@@ -139,16 +145,30 @@ public:
139145
140146
```go
141147
func numberOfArrays(differences []int, lower int, upper int) int {
142-
num, mi, mx := 0, 0, 0
148+
x, mi, mx := 0, 0, 0
143149
for _, d := range differences {
144-
num += d
145-
mi = min(mi, num)
146-
mx = max(mx, num)
150+
x += d
151+
mi = min(mi, x)
152+
mx = max(mx, x)
147153
}
148154
return max(0, upper-lower-(mx-mi)+1)
149155
}
150156
```
151157

158+
#### TypeScript
159+
160+
```ts
161+
function numberOfArrays(differences: number[], lower: number, upper: number): number {
162+
let [x, mi, mx] = [0, 0, 0];
163+
for (const d of differences) {
164+
x += d;
165+
mi = Math.min(mi, x);
166+
mx = Math.max(mx, x);
167+
}
168+
return Math.max(0, upper - lower - (mx - mi) + 1);
169+
}
170+
```
171+
152172
<!-- tabs:end -->
153173

154174
<!-- solution:end -->

solution/2100-2199/2145.Count the Hidden Sequences/README_EN.md

+41-21
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,13 @@ Thus, we return 4.
8686

8787
<!-- solution:start -->
8888

89-
### Solution 1
89+
### Solution 1: Prefix Sum
90+
91+
Since the array $\textit{differences}$ is already determined, the difference between the maximum and minimum values of the elements in the array $\textit{hidden}$ is also fixed. We just need to ensure that this difference does not exceed $\textit{upper} - \textit{lower}$.
92+
93+
Let's assume the first element of the array $\textit{hidden}$ is $0$. Then, $\textit{hidden}[i] = \textit{hidden}[i - 1] + \textit{differences}[i - 1]$, where $1 \leq i \leq n$. Let the maximum value of the array $\textit{hidden}$ be $mx$ and the minimum value be $mi$. If $mx - mi \leq \textit{upper} - \textit{lower}$, then we can construct a valid $\textit{hidden}$ array. The number of possible constructions is $\textit{upper} - \textit{lower} - (mx - mi) + 1$. Otherwise, it is impossible to construct a valid $\textit{hidden}$ array, and we return $0$.
94+
95+
The time complexity is $O(n)$, where $n$ is the length of the array $\textit{differences}$. The space complexity is $O(1)$.
9096

9197
<!-- tabs:start -->
9298

@@ -95,26 +101,26 @@ Thus, we return 4.
95101
```python
96102
class Solution:
97103
def numberOfArrays(self, differences: List[int], lower: int, upper: int) -> int:
98-
num = mi = mx = 0
104+
x = mi = mx = 0
99105
for d in differences:
100-
num += d
101-
mi = min(mi, num)
102-
mx = max(mx, num)
103-
return max(0, upper - lower - (mx - mi) + 1)
106+
x += d
107+
mi = min(mi, x)
108+
mx = max(mx, x)
109+
return max(upper - lower - (mx - mi) + 1, 0)
104110
```
105111

106112
#### Java
107113

108114
```java
109115
class Solution {
110116
public int numberOfArrays(int[] differences, int lower, int upper) {
111-
long num = 0, mi = 0, mx = 0;
117+
long x = 0, mi = 0, mx = 0;
112118
for (int d : differences) {
113-
num += d;
114-
mi = Math.min(mi, num);
115-
mx = Math.max(mx, num);
119+
x += d;
120+
mi = Math.min(mi, x);
121+
mx = Math.max(mx, x);
116122
}
117-
return Math.max(0, (int) (upper - lower - (mx - mi) + 1));
123+
return (int) Math.max(upper - lower - (mx - mi) + 1, 0);
118124
}
119125
}
120126
```
@@ -125,13 +131,13 @@ class Solution {
125131
class Solution {
126132
public:
127133
int numberOfArrays(vector<int>& differences, int lower, int upper) {
128-
long long num = 0, mi = 0, mx = 0;
129-
for (int& d : differences) {
130-
num += d;
131-
mi = min(mi, num);
132-
mx = max(mx, num);
134+
long long x = 0, mi = 0, mx = 0;
135+
for (int d : differences) {
136+
x += d;
137+
mi = min(mi, x);
138+
mx = max(mx, x);
133139
}
134-
return max(0, (int) (upper - lower - (mx - mi) + 1));
140+
return max(upper - lower - (mx - mi) + 1, 0LL);
135141
}
136142
};
137143
```
@@ -140,16 +146,30 @@ public:
140146
141147
```go
142148
func numberOfArrays(differences []int, lower int, upper int) int {
143-
num, mi, mx := 0, 0, 0
149+
x, mi, mx := 0, 0, 0
144150
for _, d := range differences {
145-
num += d
146-
mi = min(mi, num)
147-
mx = max(mx, num)
151+
x += d
152+
mi = min(mi, x)
153+
mx = max(mx, x)
148154
}
149155
return max(0, upper-lower-(mx-mi)+1)
150156
}
151157
```
152158

159+
#### TypeScript
160+
161+
```ts
162+
function numberOfArrays(differences: number[], lower: number, upper: number): number {
163+
let [x, mi, mx] = [0, 0, 0];
164+
for (const d of differences) {
165+
x += d;
166+
mi = Math.min(mi, x);
167+
mx = Math.max(mx, x);
168+
}
169+
return Math.max(0, upper - lower - (mx - mi) + 1);
170+
}
171+
```
172+
153173
<!-- tabs:end -->
154174

155175
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
class Solution {
22
public:
33
int numberOfArrays(vector<int>& differences, int lower, int upper) {
4-
long long num = 0, mi = 0, mx = 0;
5-
for (int& d : differences) {
6-
num += d;
7-
mi = min(mi, num);
8-
mx = max(mx, num);
4+
long long x = 0, mi = 0, mx = 0;
5+
for (int d : differences) {
6+
x += d;
7+
mi = min(mi, x);
8+
mx = max(mx, x);
99
}
10-
return max(0, (int) (upper - lower - (mx - mi) + 1));
10+
return max(upper - lower - (mx - mi) + 1, 0LL);
1111
}
12-
};
12+
};
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
func numberOfArrays(differences []int, lower int, upper int) int {
2-
num, mi, mx := 0, 0, 0
2+
x, mi, mx := 0, 0, 0
33
for _, d := range differences {
4-
num += d
5-
mi = min(mi, num)
6-
mx = max(mx, num)
4+
x += d
5+
mi = min(mi, x)
6+
mx = max(mx, x)
77
}
88
return max(0, upper-lower-(mx-mi)+1)
9-
}
9+
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
class Solution {
22
public int numberOfArrays(int[] differences, int lower, int upper) {
3-
long num = 0, mi = 0, mx = 0;
3+
long x = 0, mi = 0, mx = 0;
44
for (int d : differences) {
5-
num += d;
6-
mi = Math.min(mi, num);
7-
mx = Math.max(mx, num);
5+
x += d;
6+
mi = Math.min(mi, x);
7+
mx = Math.max(mx, x);
88
}
9-
return Math.max(0, (int) (upper - lower - (mx - mi) + 1));
9+
return (int) Math.max(upper - lower - (mx - mi) + 1, 0);
1010
}
11-
}
11+
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
class Solution:
22
def numberOfArrays(self, differences: List[int], lower: int, upper: int) -> int:
3-
num = mi = mx = 0
3+
x = mi = mx = 0
44
for d in differences:
5-
num += d
6-
mi = min(mi, num)
7-
mx = max(mx, num)
8-
return max(0, upper - lower - (mx - mi) + 1)
5+
x += d
6+
mi = min(mi, x)
7+
mx = max(mx, x)
8+
return max(upper - lower - (mx - mi) + 1, 0)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
function numberOfArrays(differences: number[], lower: number, upper: number): number {
2+
let [x, mi, mx] = [0, 0, 0];
3+
for (const d of differences) {
4+
x += d;
5+
mi = Math.min(mi, x);
6+
mx = Math.max(mx, x);
7+
}
8+
return Math.max(0, upper - lower - (mx - mi) + 1);
9+
}

0 commit comments

Comments
 (0)