Leetcode | Maximum Product Subarray
7090 ワード
Leetcodeに新しい問題が加わった
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array [2,3,-2,4],the contiguous subarray [2,3] has the largest product = 6.
考えを整理するのは難しくありません.現在の位置を含む最大正数と最小負数を維持することです.負数を扱うときは注意が必要です.
solutionを見てから、もっと簡潔な書き方がありました.私はまだ弱いです.毎日新しいことを学ぶことができますね.
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array [2,3,-2,4],the contiguous subarray [2,3] has the largest product = 6.
考えを整理するのは難しくありません.現在の位置を含む最大正数と最小負数を維持することです.負数を扱うときは注意が必要です.
1 class Solution {
2 public:
3 int maxProduct(int arr[], int n) {
4 if (n <= 0) return 0;
5 int maxPos = 1, minNeg = 1, max = INT_MIN;
6 for (int i = 0; i < n; ++i) {
7 if (arr[i] > 0) {
8 maxPos = maxPos * arr[i];
9 minNeg = minNeg > 0 ? 1: minNeg * arr[i];
10 if (maxPos > max) max = maxPos;
11 } else if (arr[i] == 0) {
12 maxPos = minNeg = 1;
13 if (max < 0) max = 0;
14 } else { // arr[i] < 0
15 int tmp = maxPos;
16 if (minNeg > 0) {
17 maxPos = 1;
18 } else {
19 maxPos = minNeg * arr[i];
20 if (maxPos > max) max = maxPos;
21 }
22 minNeg = tmp * arr[i];
23 if (minNeg > max) max = minNeg;
24 }
25 }
26 return max;
27 }
28 };
solutionを見てから、もっと簡潔な書き方がありました.私はまだ弱いです.毎日新しいことを学ぶことができますね.
1 class Solution {
2 public:
3 int maxProduct(int arr[], int n) {
4 if (n <= 0) return 0;
5 int maxSoFar = arr[0], minSoFar = arr[0], ans = arr[0];
6 for (int i = 1; i < n; ++i) {
7 int tmp = maxSoFar;
8 maxSoFar = max(max(arr[i], maxSoFar * arr[i]), minSoFar * arr[i]);
9 minSoFar = min(min(arr[i], tmp * arr[i]), minSoFar * arr[i]);
10 if (maxSoFar > ans) ans = maxSoFar;
11 }
12 return ans;
13 }
14 };