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
.
Subscribe to see which companies asked this question.
解析:由于可能存在负数的情况,每次应该保存局部最大和局部最小,以及全局最大值
class Solution {
public:
int maxint(int a, int b) {
if (a > b) return a;
return b;
}
int minint(int a, int b) {
if (a < b) return a;
return b;
}
int maxProduct(vector<int>& nums) {
int len = nums.size();
if (len == 1) return nums[0];
int min_tmp = nums[0];
int max_tmp = nums[0];
int max_product = nums[0];
for (int i = 1; i < len; ++i)
{
int a = min_tmp * nums[i];
int b = max_tmp * nums[i];
max_tmp = maxint(maxint(a, b), nums[i]);
min_tmp = minint(minint(a, b), nums[i]);
max_product = maxint(max_product, max_tmp);
}
return max_product;
}
};