Find the contiguous subarray within an array (containing at least one number) which has the largest product.
Example
For example, given the array [2,3,-2,4]
, the contiguous subarray [2,3]
has the largest product = 6
.
思路是dp解决, 过程中保存最小的整数与最大的负数, 然后你懂的~
class Solution {
public:
/**
* @param nums: a vector of integers
* @return: an integer
*/
int maxProduct(vector<int>& nums) {
// write your code here
const int len = nums.size();
int dp[len];
int neg_max = INT_MIN;
int pos_min = INT_MAX;
int max_val;
for (int i = 0; i < nums.size(); i++) {
if (i == 0) {
dp[0] = nums[0];
max_val= dp[0];
} else {
if (dp[i-1] !=0) {
dp[i] = dp[i-1] * nums[i];
}else {
dp[i] = nums[i];
}
if (dp[i] > 0) {
max_val = max(max_val, dp[i]);
}
if (dp[i] < 0) {
int max_neg;
if (neg_max==INT_MIN)
max_neg = dp[i];
else
max_neg = dp[i] / neg_max;
max_val = max(max_val, max_neg);
}
if (dp[i] == 0) {
max_val = max(max_val, dp[i]);
neg_max = INT_MIN;
}
}
//cout<<dp[i]<<" "<<neg_max<<endl;
if (dp[i] < 0) {
neg_max = max(neg_max, dp[i]);
}
}
return max_val;
}
};