码迷,mamicode.com
首页 > 其他好文 > 详细

Maximum Product Subarray

时间:2016-09-15 15:05:05      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

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.

 

Analyse: brute force

Time limit exceeded.

 1 class Solution {
 2 public:
 3     int maxProduct(vector<int>& nums) {
 4         if (nums.empty()) return 0;
 5         
 6         int result = INT_MIN;
 7         for (int i = 0; i < nums.size(); i++) {
 8             int tempProduct = 1;
 9             for (int j = i; j < nums.size(); j++) {
10                 tempProduct *= nums[j];
11                 result = max(result, tempProduct);
12             }
13         }
14         return result;
15     }
16 };

 

Analyse: Dive into the features of the array, it asks us to compute the product of a continuous subarray. Every element has two choices: combine with its former element, and not combine with its former element. Consider the index i, suppose the former maximum is preMax, and the former minimum is preMin. Combine with former elements may update the value of preMax or preMin, and do not combine with former elements may also update the value of preMax or preMin. 

Do remember that after updating the newMin/newMax, we can not calculate the newMax/newMin with the newMin/newMax.

Runtime: 6ms

 1 class Solution {
 2 public:
 3     int maxProduct(vector<int>& nums) {
 4         if (nums.empty()) return 0;
 5         
 6         int preMin = nums[0], preMax = nums[0];
 7         int result = preMax;
 8         for (int i = 1; i < nums.size(); i++) {
 9             int newMin = min(preMin * nums[i], min(preMax * nums[i], nums[i]));
10             preMax = max(preMin * nums[i], max(preMax * nums[i], nums[i]));
11             preMin = newMin;
12             result = max(preMax, result);
13         }
14         return result;
15     }
16 };

 

Maximum Product Subarray

标签:

原文地址:http://www.cnblogs.com/amazingzoe/p/5874739.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!