Skip to content

Commit 5c9ded2

Browse files
committed
feat: add solutions to lc problem: No.1824
No.1824.Minimum Sideway Jumps
1 parent a47d122 commit 5c9ded2

File tree

13 files changed

+441
-120
lines changed

13 files changed

+441
-120
lines changed

solution/1800-1899/1822.Sign of the Product of an Array/README.md

Lines changed: 58 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,17 @@
5757

5858
<!-- 这里可写通用的实现逻辑 -->
5959

60-
不可模拟乘积过程,给定的范围有可能导致数值溢出,只关注数值的符号变化即可。
60+
**方法一:直接遍历**
61+
62+
题目要求返回数组元素乘积的符号,即正数返回 $1$,负数返回 $-1$, 等于 $0$ 则返回 $0$。
63+
64+
我们可以定义一个答案变量 `ans`,初始值为 $1$。
65+
66+
然后遍历数组每个元素 $v$,如果 $v$ 为负数,则将 `ans` 乘上 $-1$,如果 $v$ 为 $0$,则提前返回 $0$。
67+
68+
遍历结束后,返回 `ans` 即可。
69+
70+
时间复杂度为 $O(n)$,空间复杂度为 $O(1)$。其中 $n$ 为数组长度。
6171

6272
<!-- tabs:start -->
6373

@@ -68,13 +78,13 @@
6878
```python
6979
class Solution:
7080
def arraySign(self, nums: List[int]) -> int:
71-
res = 1
72-
for num in nums:
73-
if num == 0:
81+
ans = 1
82+
for v in nums:
83+
if v == 0:
7484
return 0
75-
if num < 0:
76-
res *= -1
77-
return res
85+
if v < 0:
86+
ans *= -1
87+
return ans
7888
```
7989

8090
### **Java**
@@ -84,49 +94,32 @@ class Solution:
8494
```java
8595
class Solution {
8696
public int arraySign(int[] nums) {
87-
int res = 1;
88-
for (int num : nums) {
89-
if (num == 0) return 0;
90-
if (num < 0) res *= -1;
97+
int ans = 1;
98+
for (int v : nums) {
99+
if (v == 0) {
100+
return 0;
101+
}
102+
if (v < 0) {
103+
ans *= -1;
104+
}
91105
}
92-
return res;
106+
return ans;
93107
}
94108
}
95109
```
96110

97-
### **JavaScript**
98-
99-
```js
100-
/**
101-
* @param {number[]} nums
102-
* @return {number}
103-
*/
104-
var arraySign = function (nums) {
105-
let res = 1;
106-
for (let num of nums) {
107-
if (num == 0) return 0;
108-
if (num < 0) res *= -1;
109-
}
110-
return res;
111-
};
112-
```
113-
114111
### **C++**
115112

116113
```cpp
117114
class Solution {
118115
public:
119116
int arraySign(vector<int>& nums) {
120-
int res = 1;
121-
for (auto& num : nums) {
122-
if (num == 0) {
123-
return 0;
124-
}
125-
if (num < 0) {
126-
res *= -1;
127-
}
117+
int ans = 1;
118+
for (int v : nums) {
119+
if (!v) return 0;
120+
if (v < 0) ans *= -1;
128121
}
129-
return res;
122+
return ans;
130123
}
131124
};
132125
```
@@ -135,19 +128,40 @@ public:
135128
136129
```go
137130
func arraySign(nums []int) int {
138-
res := 1
139-
for _, num := range nums {
140-
if num == 0 {
131+
ans := 1
132+
for _, v := range nums {
133+
if v == 0 {
141134
return 0
142135
}
143-
if num < 0 {
144-
res *= -1
136+
if v < 0 {
137+
ans *= -1
145138
}
146139
}
147-
return res
140+
return ans
148141
}
149142
```
150143

144+
### **JavaScript**
145+
146+
```js
147+
/**
148+
* @param {number[]} nums
149+
* @return {number}
150+
*/
151+
var arraySign = function (nums) {
152+
let ans = 1;
153+
for (const v of nums) {
154+
if (!v) {
155+
return 0;
156+
}
157+
if (v < 0) {
158+
ans *= -1;
159+
}
160+
}
161+
return ans;
162+
};
163+
```
164+
151165
### **Rust**
152166

153167
```rust

solution/1800-1899/1822.Sign of the Product of an Array/README_EN.md

Lines changed: 47 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -58,63 +58,46 @@
5858
```python
5959
class Solution:
6060
def arraySign(self, nums: List[int]) -> int:
61-
res = 1
62-
for num in nums:
63-
if num == 0:
61+
ans = 1
62+
for v in nums:
63+
if v == 0:
6464
return 0
65-
if num < 0:
66-
res *= -1
67-
return res
65+
if v < 0:
66+
ans *= -1
67+
return ans
6868
```
6969

7070
### **Java**
7171

7272
```java
7373
class Solution {
7474
public int arraySign(int[] nums) {
75-
int res = 1;
76-
for (int num : nums) {
77-
if (num == 0) return 0;
78-
if (num < 0) res *= -1;
75+
int ans = 1;
76+
for (int v : nums) {
77+
if (v == 0) {
78+
return 0;
79+
}
80+
if (v < 0) {
81+
ans *= -1;
82+
}
7983
}
80-
return res;
84+
return ans;
8185
}
8286
}
8387
```
8488

85-
### **JavaScript**
86-
87-
```js
88-
/**
89-
* @param {number[]} nums
90-
* @return {number}
91-
*/
92-
var arraySign = function (nums) {
93-
let res = 1;
94-
for (let num of nums) {
95-
if (num == 0) return 0;
96-
if (num < 0) res *= -1;
97-
}
98-
return res;
99-
};
100-
```
101-
10289
### **C++**
10390

10491
```cpp
10592
class Solution {
10693
public:
10794
int arraySign(vector<int>& nums) {
108-
int res = 1;
109-
for (auto& num : nums) {
110-
if (num == 0) {
111-
return 0;
112-
}
113-
if (num < 0) {
114-
res *= -1;
115-
}
95+
int ans = 1;
96+
for (int v : nums) {
97+
if (!v) return 0;
98+
if (v < 0) ans *= -1;
11699
}
117-
return res;
100+
return ans;
118101
}
119102
};
120103
```
@@ -123,19 +106,40 @@ public:
123106
124107
```go
125108
func arraySign(nums []int) int {
126-
res := 1
127-
for _, num := range nums {
128-
if num == 0 {
109+
ans := 1
110+
for _, v := range nums {
111+
if v == 0 {
129112
return 0
130113
}
131-
if num < 0 {
132-
res *= -1
114+
if v < 0 {
115+
ans *= -1
133116
}
134117
}
135-
return res
118+
return ans
136119
}
137120
```
138121

122+
### **JavaScript**
123+
124+
```js
125+
/**
126+
* @param {number[]} nums
127+
* @return {number}
128+
*/
129+
var arraySign = function (nums) {
130+
let ans = 1;
131+
for (const v of nums) {
132+
if (!v) {
133+
return 0;
134+
}
135+
if (v < 0) {
136+
ans *= -1;
137+
}
138+
}
139+
return ans;
140+
};
141+
```
142+
139143
### **Rust**
140144

141145
```rust
Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
class Solution {
22
public:
33
int arraySign(vector<int>& nums) {
4-
int res = 1;
5-
for (auto& num : nums) {
6-
if (num == 0) {
7-
return 0;
8-
}
9-
if (num < 0) {
10-
res *= -1;
11-
}
4+
int ans = 1;
5+
for (int v : nums) {
6+
if (!v) return 0;
7+
if (v < 0) ans *= -1;
128
}
13-
return res;
9+
return ans;
1410
}
1511
};
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
func arraySign(nums []int) int {
2-
res := 1
3-
for _, num := range nums {
4-
if num == 0 {
2+
ans := 1
3+
for _, v := range nums {
4+
if v == 0 {
55
return 0
66
}
7-
if num < 0 {
8-
res *= -1
7+
if v < 0 {
8+
ans *= -1
99
}
1010
}
11-
return res
11+
return ans
1212
}
Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
class Solution {
22
public int arraySign(int[] nums) {
3-
int res = 1;
4-
for (int num : nums) {
5-
if (num == 0) return 0;
6-
if (num < 0) res *= -1;
3+
int ans = 1;
4+
for (int v : nums) {
5+
if (v == 0) {
6+
return 0;
7+
}
8+
if (v < 0) {
9+
ans *= -1;
10+
}
711
}
8-
return res;
12+
return ans;
913
}
1014
}

solution/1800-1899/1822.Sign of the Product of an Array/Solution.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@
33
* @return {number}
44
*/
55
var arraySign = function (nums) {
6-
let res = 1;
7-
for (let num of nums) {
8-
if (num == 0) return 0;
9-
if (num < 0) res *= -1;
6+
let ans = 1;
7+
for (const v of nums) {
8+
if (!v) {
9+
return 0;
10+
}
11+
if (v < 0) {
12+
ans *= -1;
13+
}
1014
}
11-
return res;
15+
return ans;
1216
};
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
class Solution:
22
def arraySign(self, nums: List[int]) -> int:
3-
res = 1
4-
for num in nums:
5-
if num == 0:
3+
ans = 1
4+
for v in nums:
5+
if v == 0:
66
return 0
7-
if num < 0:
8-
res *= -1
9-
return res
7+
if v < 0:
8+
ans *= -1
9+
return ans

0 commit comments

Comments
 (0)