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 d02155a

Browse files
feat: add solutions to lc problem: No.1567 (doocs#3886)
No.1567.Maximum Length of Subarray With Positive Product
1 parent 301be42 commit d02155a

File tree

12 files changed

+738
-293
lines changed

12 files changed

+738
-293
lines changed

‎solution/1500-1599/1567.Maximum Length of Subarray With Positive Product/README.md‎

Lines changed: 253 additions & 87 deletions
Large diffs are not rendered by default.

‎solution/1500-1599/1567.Maximum Length of Subarray With Positive Product/README_EN.md‎

Lines changed: 253 additions & 87 deletions
Large diffs are not rendered by default.
Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
1-
class Solution {
2-
public:
3-
int getMaxLen(vector<int>& nums) {
4-
int f1 = nums[0] > 0 ? 1 : 0;
5-
int f2 = nums[0] < 0 ? 1 : 0;
6-
int res = f1;
7-
for (int i = 1; i < nums.size(); ++i) {
8-
if (nums[i] > 0) {
9-
++f1;
10-
f2 = f2 > 0 ? f2 + 1 : 0;
11-
} else if (nums[i] < 0) {
12-
int pf1 = f1, pf2 = f2;
13-
f2 = pf1 + 1;
14-
f1 = pf2 > 0 ? pf2 + 1 : 0;
15-
} else {
16-
f1 = 0;
17-
f2 = 0;
18-
}
19-
res = max(res, f1);
20-
}
21-
return res;
22-
}
23-
};
1+
class Solution {
2+
public:
3+
int getMaxLen(vector<int>& nums) {
4+
int n = nums.size();
5+
vector<int> f(n, 0), g(n, 0);
6+
f[0] = nums[0] > 0 ? 1 : 0;
7+
g[0] = nums[0] < 0 ? 1 : 0;
8+
int ans = f[0];
9+
10+
for (int i = 1; i < n; ++i) {
11+
if (nums[i] > 0) {
12+
f[i] = f[i - 1] + 1;
13+
g[i] = g[i - 1] > 0 ? g[i - 1] + 1 : 0;
14+
} else if (nums[i] < 0) {
15+
f[i] = g[i - 1] > 0 ? g[i - 1] + 1 : 0;
16+
g[i] = f[i - 1] + 1;
17+
}
18+
ans = max(ans, f[i]);
19+
}
20+
return ans;
21+
}
22+
};
Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
1-
func getMaxLen(nums []int) int {
2-
f1, f2:= 0, 0
3-
ifnums[0] >0 {
4-
f1=1
5-
}
6-
ifnums[0] <0 {
7-
f2=1
8-
}
9-
res:=f1
10-
fori:=1; i<len(nums); i++ {
11-
ifnums[i] >0 {
12-
f1++
13-
iff2>0 {
14-
f2++
15-
} else {
16-
f2=0
17-
}
18-
} elseifnums[i] <0 {
19-
pf1, pf2:=f1, f2
20-
f2=pf1+1
21-
if pf2> 0 {
22-
f1=pf2+1
23-
} else {
24-
f1=0
25-
}
26-
} else {
27-
f1, f2=0, 0
28-
}
29-
res = max(res, f1)
30-
}
31-
return res
32-
}
1+
func getMaxLen(nums []int) int {
2+
n:= len(nums)
3+
f:=make([]int, n)
4+
g:=make([]int, n)
5+
ifnums[0] >0 {
6+
f[0] =1
7+
}
8+
ifnums[0] <0 {
9+
g[0] =1
10+
}
11+
ans:=f[0]
12+
13+
fori:=1; i<n; i++ {
14+
ifnums[i] >0 {
15+
f[i] =f[i-1] +1
16+
ifg[i-1] >0 {
17+
g[i] =g[i-1] +1
18+
} else {
19+
g[i] =0
20+
}
21+
} elseif nums[i] < 0 {
22+
ifg[i-1] >0 {
23+
f[i] =g[i-1] +1
24+
} else {
25+
f[i] =0
26+
}
27+
g[i] =f[i-1] +1
28+
}
29+
ans = max(ans, f[i])
30+
}
31+
return ans
32+
}
Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
1-
class Solution {
2-
public int getMaxLen(int[] nums) {
3-
int f1 = nums[0] > 0 ? 1 : 0;
4-
int f2 = nums[0] < 0 ? 1 : 0;
5-
int res = f1;
6-
for (int i = 1; i < nums.length; ++i) {
7-
if (nums[i] > 0) {
8-
++f1;
9-
f2 = f2 > 0 ? f2 + 1 : 0;
10-
} else if (nums[i] < 0) {
11-
int pf1 = f1, pf2 = f2;
12-
f2 = pf1 + 1;
13-
f1 = pf2 > 0 ? pf2 + 1 : 0;
14-
} else {
15-
f1 = 0;
16-
f2 = 0;
17-
}
18-
res = Math.max(res, f1);
19-
}
20-
return res;
21-
}
22-
}
1+
class Solution {
2+
public int getMaxLen(int[] nums) {
3+
int n = nums.length;
4+
int[] f = new int[n];
5+
int[] g = new int[n];
6+
f[0] = nums[0] > 0 ? 1 : 0;
7+
g[0] = nums[0] < 0 ? 1 : 0;
8+
int ans = f[0];
9+
for (int i = 1; i < n; ++i) {
10+
if (nums[i] > 0) {
11+
f[i] = f[i - 1] + 1;
12+
g[i] = g[i - 1] > 0 ? g[i - 1] + 1 : 0;
13+
} else if (nums[i] < 0) {
14+
f[i] = g[i - 1] > 0 ? g[i - 1] + 1 : 0;
15+
g[i] = f[i - 1] + 1;
16+
}
17+
ans = Math.max(ans, f[i]);
18+
}
19+
return ans;
20+
}
21+
}
Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,17 @@
1-
class Solution:
2-
def getMaxLen(self, nums: List[int]) -> int:
3-
f1 = 1 if nums[0] > 0 else 0
4-
f2 = 1 if nums[0] < 0 else 0
5-
res = f1
6-
for num in nums[1:]:
7-
pf1, pf2 = f1, f2
8-
if num > 0:
9-
f1 += 1
10-
if f2 > 0:
11-
f2 += 1
12-
else:
13-
f2 = 0
14-
elif num < 0:
15-
pf1, pf2 = f1, f2
16-
f2 = pf1 + 1
17-
if pf2 > 0:
18-
f1 = pf2 + 1
19-
else:
20-
f1 = 0
21-
else:
22-
f1 = 0
23-
f2 = 0
24-
res = max(res, f1)
25-
return res
1+
class Solution:
2+
def getMaxLen(self, nums: List[int]) -> int:
3+
n = len(nums)
4+
f = [0] * n
5+
g = [0] * n
6+
f[0] = int(nums[0] > 0)
7+
g[0] = int(nums[0] < 0)
8+
ans = f[0]
9+
for i in range(1, n):
10+
if nums[i] > 0:
11+
f[i] = f[i - 1] + 1
12+
g[i] = 0 if g[i - 1] == 0 else g[i - 1] + 1
13+
elif nums[i] < 0:
14+
f[i] = 0 if g[i - 1] == 0 else g[i - 1] + 1
15+
g[i] = f[i - 1] + 1
16+
ans = max(ans, f[i])
17+
return ans
Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,27 @@
11
function getMaxLen(nums: number[]): number {
2-
// 连续正数计数n1, 连续负数计数n2
3-
let n1 = nums[0] > 0 ? 1 : 0,
4-
n2 = nums[0] < 0 ? 1 : 0;
5-
let ans = n1;
6-
for (let i = 1; i < nums.length; ++i) {
7-
let cur = nums[i];
8-
if (cur == 0) {
9-
(n1 = 0), (n2 = 0);
10-
} else if (cur > 0) {
11-
++n1;
12-
n2 = n2 > 0 ? n2 + 1 : 0;
13-
} else {
14-
let t1 = n1,
15-
t2 = n2;
16-
n1 = t2 > 0 ? t2 + 1 : 0;
17-
n2 = t1 + 1;
2+
const n = nums.length;
3+
const f: number[] = Array(n).fill(0);
4+
const g: number[] = Array(n).fill(0);
5+
6+
if (nums[0] > 0) {
7+
f[0] = 1;
8+
}
9+
if (nums[0] < 0) {
10+
g[0] = 1;
11+
}
12+
13+
let ans = f[0];
14+
for (let i = 1; i < n; i++) {
15+
if (nums[i] > 0) {
16+
f[i] = f[i - 1] + 1;
17+
g[i] = g[i - 1] > 0 ? g[i - 1] + 1 : 0;
18+
} else if (nums[i] < 0) {
19+
f[i] = g[i - 1] > 0 ? g[i - 1] + 1 : 0;
20+
g[i] = f[i - 1] + 1;
1821
}
19-
ans = Math.max(ans, n1);
22+
23+
ans = Math.max(ans, f[i]);
2024
}
25+
2126
return ans;
2227
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public:
3+
int getMaxLen(vector<int>& nums) {
4+
int n = nums.size();
5+
int f = nums[0] > 0 ? 1 : 0;
6+
int g = nums[0] < 0 ? 1 : 0;
7+
int ans = f;
8+
9+
for (int i = 1; i < n; i++) {
10+
int ff = 0, gg = 0;
11+
if (nums[i] > 0) {
12+
ff = f + 1;
13+
gg = g == 0 ? 0 : g + 1;
14+
} else if (nums[i] < 0) {
15+
ff = g == 0 ? 0 : g + 1;
16+
gg = f + 1;
17+
}
18+
f = ff;
19+
g = gg;
20+
ans = max(ans, f);
21+
}
22+
23+
return ans;
24+
}
25+
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
func getMaxLen(nums []int) int {
2+
n := len(nums)
3+
var f, g int
4+
if nums[0] > 0 {
5+
f = 1
6+
} else if nums[0] < 0 {
7+
g = 1
8+
}
9+
ans := f
10+
for i := 1; i < n; i++ {
11+
ff, gg := 0, 0
12+
if nums[i] > 0 {
13+
ff = f + 1
14+
gg = 0
15+
if g > 0 {
16+
gg = g + 1
17+
}
18+
} else if nums[i] < 0 {
19+
ff = 0
20+
if g > 0 {
21+
ff = g + 1
22+
}
23+
gg = f + 1
24+
}
25+
f, g = ff, gg
26+
ans = max(ans, f)
27+
}
28+
return ans
29+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
public int getMaxLen(int[] nums) {
3+
int n = nums.length;
4+
int f = nums[0] > 0 ? 1 : 0;
5+
int g = nums[0] < 0 ? 1 : 0;
6+
int ans = f;
7+
8+
for (int i = 1; i < n; i++) {
9+
int ff = 0, gg = 0;
10+
if (nums[i] > 0) {
11+
ff = f + 1;
12+
gg = g == 0 ? 0 : g + 1;
13+
} else if (nums[i] < 0) {
14+
ff = g == 0 ? 0 : g + 1;
15+
gg = f + 1;
16+
}
17+
f = ff;
18+
g = gg;
19+
ans = Math.max(ans, f);
20+
}
21+
22+
return ans;
23+
}
24+
}

0 commit comments

Comments
(0)

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