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 407977f

Browse files
committed
feat: add solutions to lc problem: No.0152. Maximum Product Subarray
1 parent 8dfe544 commit 407977f

File tree

9 files changed

+206
-50
lines changed

9 files changed

+206
-50
lines changed

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,11 +169,11 @@
169169
- [跳跃游戏 II](./solution/0000-0099/0045.Jump%20Game%20II/README.md)
170170
- [最大子序和](./solution/0000-0099/0053.Maximum%20Subarray/README.md)
171171
- [环形子数组的最大和](./solution/0900-0999/0918.Maximum%20Sum%20Circular%20Subarray/README.md)
172+
- [乘积最大子序列](./solution/0100-0199/0152.Maximum%20Product%20Subarray/README.md)
172173
- [接雨水](./solution/0000-0099/0042.Trapping%20Rain%20Water/README.md)
173174
- [礼物的最大价值](./lcof/面试题47.%20礼物的最大价值/README.md)
174175
- [最小路径和](./solution/0000-0099/0064.Minimum%20Path%20Sum/README.md)
175176
- [解码方法](./solution/0000-0099/0091.Decode%20Ways/README.md)
176-
- [乘积最大子序列](./solution/0100-0199/0152.Maximum%20Product%20Subarray/README.md)
177177
- [最长上升子序列](./solution/0300-0399/0300.Longest%20Increasing%20Subsequence/README.md)
178178
- [俄罗斯套娃信封问题](./solution/0300-0399/0354.Russian%20Doll%20Envelopes/README.md)
179179
- [最长公共子序列](./solution/1100-1199/1143.Longest%20Common%20Subsequence/README.md)

‎README_EN.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,10 +163,10 @@ Complete solutions to [LeetCode](https://leetcode.com/problemset/all/), [LCOF](h
163163
- [Jump Game II](./solution/0000-0099/0045.Jump%20Game%20II/README_EN.md)
164164
- [Maximum Subarray](./solution/0000-0099/0053.Maximum%20Subarray/README_EN.md)
165165
- [Maximum Sum Circular Subarray](./solution/0900-0999/0918.Maximum%20Sum%20Circular%20Subarray/README_EN.md)
166+
- [Maximum Product Subarray](./solution/0100-0199/0152.Maximum%20Product%20Subarray/README_EN.md)
166167
- [Trapping Rain Water](./solution/0000-0099/0042.Trapping%20Rain%20Water/README_EN.md)
167168
- [Minimum Path Sum](./solution/0000-0099/0064.Minimum%20Path%20Sum/README_EN.md)
168169
- [Decode Ways](./solution/0000-0099/0091.Decode%20Ways/README_EN.md)
169-
- [Maximum Product Subarray](./solution/0100-0199/0152.Maximum%20Product%20Subarray/README_EN.md)
170170
- [Longest Increasing Subsequence](./solution/0300-0399/0300.Longest%20Increasing%20Subsequence/README_EN.md)
171171
- [Russian Doll Envelopes](./solution/0300-0399/0354.Russian%20Doll%20Envelopes/README_EN.md)
172172
- [Longest Common Subsequence](./solution/1100-1199/1143.Longest%20Common%20Subsequence/README_EN.md)

‎solution/0100-0199/0152.Maximum Product Subarray/README.md‎

Lines changed: 75 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,11 @@
4848
```python
4949
class Solution:
5050
def maxProduct(self, nums: List[int]) -> int:
51-
maxf = minf = nums[0]
52-
res, n = nums[0], len(nums)
53-
for i in range(1, n):
54-
p, q = maxf, minf
55-
maxf = max(nums[i], p * nums[i], q * nums[i])
56-
minf = min(nums[i], p * nums[i], q * nums[i])
51+
maxf = minf = res = nums[0]
52+
for num in nums[1:]:
53+
m, n = maxf, minf
54+
maxf = max(num, m * num, n * num)
55+
minf = min(num, m * num, n * num)
5756
res = max(res, maxf)
5857
return res
5958
```
@@ -65,19 +64,83 @@ class Solution:
6564
```java
6665
class Solution {
6766
public int maxProduct(int[] nums) {
68-
int maxf = nums[0], minf = nums[0];
69-
int res = nums[0], n = nums.length;
70-
for (int i = 1; i < n; ++i) {
71-
int p = maxf, q = minf;
72-
maxf = Math.max(nums[i], Math.max(p * nums[i], q * nums[i]));
73-
minf = Math.min(nums[i], Math.min(p * nums[i], q * nums[i]));
67+
int maxf = nums[0], minf = nums[0], res = nums[0];
68+
for (int i = 1; i < nums.length; ++i) {
69+
int m = maxf, n = minf;
70+
maxf = Math.max(nums[i], Math.max(m * nums[i], n * nums[i]));
71+
minf = Math.min(nums[i], Math.min(m * nums[i], n * nums[i]));
7472
res = Math.max(res, maxf);
7573
}
7674
return res;
7775
}
7876
}
7977
```
8078

79+
### **C#**
80+
81+
```cs
82+
public class Solution {
83+
public int MaxProduct(int[] nums) {
84+
int maxf = nums[0], minf = nums[0], res = nums[0];
85+
for (int i = 1; i < nums.Length; ++i)
86+
{
87+
int m = maxf, n = minf;
88+
maxf = Math.Max(nums[i], Math.Max(nums[i] * m, nums[i] * n));
89+
minf = Math.Min(nums[i], Math.Min(nums[i] * m, nums[i] * n));
90+
res = Math.Max(res, maxf);
91+
}
92+
return res;
93+
}
94+
}
95+
```
96+
97+
### **C++**
98+
99+
```cpp
100+
class Solution {
101+
public:
102+
int maxProduct(vector<int>& nums) {
103+
int maxf = nums[0], minf = nums[0], res = nums[0];
104+
for (int i = 1; i < nums.size(); ++i) {
105+
int m = maxf, n = minf;
106+
maxf = max(nums[i], max(nums[i] * m, nums[i] * n));
107+
minf = min(nums[i], min(nums[i] * m, nums[i] * n));
108+
res = max(res, maxf);
109+
}
110+
return res;
111+
}
112+
};
113+
```
114+
115+
### **Go**
116+
117+
```go
118+
func maxProduct(nums []int) int {
119+
maxf, minf, res := nums[0], nums[0], nums[0]
120+
for i := 1; i < len(nums); i++ {
121+
m, n := maxf, minf
122+
maxf = max(nums[i], max(nums[i]*m, nums[i]*n))
123+
minf = min(nums[i], min(nums[i]*m, nums[i]*n))
124+
res = max(res, maxf)
125+
}
126+
return res
127+
}
128+
129+
func max(a, b int) int {
130+
if a > b {
131+
return a
132+
}
133+
return b
134+
}
135+
136+
func min(a, b int) int {
137+
if a < b {
138+
return a
139+
}
140+
return b
141+
}
142+
```
143+
81144
### **...**
82145

83146
```

‎solution/0100-0199/0152.Maximum Product Subarray/README_EN.md‎

Lines changed: 75 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,11 @@
4646
```python
4747
class Solution:
4848
def maxProduct(self, nums: List[int]) -> int:
49-
maxf = minf = nums[0]
50-
res, n = nums[0], len(nums)
51-
for i in range(1, n):
52-
p, q = maxf, minf
53-
maxf = max(nums[i], p * nums[i], q * nums[i])
54-
minf = min(nums[i], p * nums[i], q * nums[i])
49+
maxf = minf = res = nums[0]
50+
for num in nums[1:]:
51+
m, n = maxf, minf
52+
maxf = max(num, m * num, n * num)
53+
minf = min(num, m * num, n * num)
5554
res = max(res, maxf)
5655
return res
5756
```
@@ -61,19 +60,83 @@ class Solution:
6160
```java
6261
class Solution {
6362
public int maxProduct(int[] nums) {
64-
int maxf = nums[0], minf = nums[0];
65-
int res = nums[0], n = nums.length;
66-
for (int i = 1; i < n; ++i) {
67-
int p = maxf, q = minf;
68-
maxf = Math.max(nums[i], Math.max(p * nums[i], q * nums[i]));
69-
minf = Math.min(nums[i], Math.min(p * nums[i], q * nums[i]));
63+
int maxf = nums[0], minf = nums[0], res = nums[0];
64+
for (int i = 1; i < nums.length; ++i) {
65+
int m = maxf, n = minf;
66+
maxf = Math.max(nums[i], Math.max(m * nums[i], n * nums[i]));
67+
minf = Math.min(nums[i], Math.min(m * nums[i], n * nums[i]));
7068
res = Math.max(res, maxf);
7169
}
7270
return res;
7371
}
7472
}
7573
```
7674

75+
### **C#**
76+
77+
```cs
78+
public class Solution {
79+
public int MaxProduct(int[] nums) {
80+
int maxf = nums[0], minf = nums[0], res = nums[0];
81+
for (int i = 1; i < nums.Length; ++i)
82+
{
83+
int m = maxf, n = minf;
84+
maxf = Math.Max(nums[i], Math.Max(nums[i] * m, nums[i] * n));
85+
minf = Math.Min(nums[i], Math.Min(nums[i] * m, nums[i] * n));
86+
res = Math.Max(res, maxf);
87+
}
88+
return res;
89+
}
90+
}
91+
```
92+
93+
### **C++**
94+
95+
```cpp
96+
class Solution {
97+
public:
98+
int maxProduct(vector<int>& nums) {
99+
int maxf = nums[0], minf = nums[0], res = nums[0];
100+
for (int i = 1; i < nums.size(); ++i) {
101+
int m = maxf, n = minf;
102+
maxf = max(nums[i], max(nums[i] * m, nums[i] * n));
103+
minf = min(nums[i], min(nums[i] * m, nums[i] * n));
104+
res = max(res, maxf);
105+
}
106+
return res;
107+
}
108+
};
109+
```
110+
111+
### **Go**
112+
113+
```go
114+
func maxProduct(nums []int) int {
115+
maxf, minf, res := nums[0], nums[0], nums[0]
116+
for i := 1; i < len(nums); i++ {
117+
m, n := maxf, minf
118+
maxf = max(nums[i], max(nums[i]*m, nums[i]*n))
119+
minf = min(nums[i], min(nums[i]*m, nums[i]*n))
120+
res = max(res, maxf)
121+
}
122+
return res
123+
}
124+
125+
func max(a, b int) int {
126+
if a > b {
127+
return a
128+
}
129+
return b
130+
}
131+
132+
func min(a, b int) int {
133+
if a < b {
134+
return a
135+
}
136+
return b
137+
}
138+
```
139+
77140
### **...**
78141

79142
```
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution {
2+
public:
3+
int maxProduct(vector<int>& nums) {
4+
int maxf = nums[0], minf = nums[0], res = nums[0];
5+
for (int i = 1; i < nums.size(); ++i) {
6+
int m = maxf, n = minf;
7+
maxf = max(nums[i], max(nums[i] * m, nums[i] * n));
8+
minf = min(nums[i], min(nums[i] * m, nums[i] * n));
9+
res = max(res, maxf);
10+
}
11+
return res;
12+
}
13+
};
Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
1-
using System;
2-
31
public class Solution {
42
public int MaxProduct(int[] nums) {
5-
var prevMin = 1;
6-
var prevMax = 1;
7-
var result = int.MinValue;
8-
for (var i = 0; i < nums.Length; ++i)
3+
int maxf = nums[0], minf = nums[0], res = nums[0];
4+
for (int i = 1; i < nums.Length; ++i)
95
{
10-
var max = Math.Max(nums[i], Math.Max(nums[i] * prevMin, nums[i] * prevMax));
11-
var min = Math.Min(nums[i], Math.Min(nums[i] * prevMin, nums[i] * prevMax));
12-
result = Math.Max(result, max);
13-
prevMax = max;
14-
prevMin = min;
6+
int m = maxf, n = minf;
7+
maxf = Math.Max(nums[i], Math.Max(nums[i] * m, nums[i] * n));
8+
minf = Math.Min(nums[i], Math.Min(nums[i] * m, nums[i] * n));
9+
res = Math.Max(res, maxf);
1510
}
16-
return result;
11+
return res;
1712
}
1813
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
func maxProduct(nums []int) int {
2+
maxf, minf, res := nums[0], nums[0], nums[0]
3+
for i := 1; i < len(nums); i++ {
4+
m, n := maxf, minf
5+
maxf = max(nums[i], max(nums[i]*m, nums[i]*n))
6+
minf = min(nums[i], min(nums[i]*m, nums[i]*n))
7+
res = max(res, maxf)
8+
}
9+
return res
10+
}
11+
12+
func max(a, b int) int {
13+
if a > b {
14+
return a
15+
}
16+
return b
17+
}
18+
19+
func min(a, b int) int {
20+
if a < b {
21+
return a
22+
}
23+
return b
24+
}

‎solution/0100-0199/0152.Maximum Product Subarray/Solution.java‎

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
class Solution {
22
public int maxProduct(int[] nums) {
3-
int maxf = nums[0], minf = nums[0];
4-
int res = nums[0], n = nums.length;
5-
for (int i = 1; i < n; ++i) {
6-
int p = maxf, q = minf;
7-
maxf = Math.max(nums[i], Math.max(p * nums[i], q * nums[i]));
8-
minf = Math.min(nums[i], Math.min(p * nums[i], q * nums[i]));
3+
int maxf = nums[0], minf = nums[0], res = nums[0];
4+
for (int i = 1; i < nums.length; ++i) {
5+
int m = maxf, n = minf;
6+
maxf = Math.max(nums[i], Math.max(m * nums[i], n * nums[i]));
7+
minf = Math.min(nums[i], Math.min(m * nums[i], n * nums[i]));
98
res = Math.max(res, maxf);
109
}
1110
return res;
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
class Solution:
22
def maxProduct(self, nums: List[int]) -> int:
3-
maxf = minf = nums[0]
4-
res, n = nums[0], len(nums)
5-
for i in range(1, n):
6-
p, q = maxf, minf
7-
maxf = max(nums[i], p * nums[i], q * nums[i])
8-
minf = min(nums[i], p * nums[i], q * nums[i])
3+
maxf = minf = res = nums[0]
4+
for num in nums[1:]:
5+
m, n = maxf, minf
6+
maxf = max(num, m * num, n * num)
7+
minf = min(num, m * num, n * num)
98
res = max(res, maxf)
109
return res

0 commit comments

Comments
(0)

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