题解 | #连续子数组的最大乘积#
连续子数组的最大乘积
http://www.nowcoder.com/practice/fd8c819c07c9493887bfac8549c119f4
动态规划(C++)
这个时leecode的思路,可以看看。
#include<iostream>
#include<vector>
#define INT_MAX 0x7fffffff
#define INT_MIN 0x80000000
using namespace std;
int maxMuti(vector<int> &arr,int nums){
int GMax = arr[0];
int GMin = arr[0];
int max_n = INT_MIN;
//(1)
for(int i = 1;i < nums; i++){
int mx = GMax, mn = GMin;
GMax = max(mx * arr[i] , max(mn*arr[i] , arr[i]));
GMin = min(mn * arr[i] , min(mx*arr[i] , arr[i]));
max_n = max(GMax , max_n);
//cout << GMax <<endl;
}
return max_n;
}
int main(){
int nums;
cin >> nums;
vector<int> arr(nums);
for(int i = 0;i < nums; i++){
cin >> arr[i];
}
//(2)
//这里是为了处理只有一个输入的情况。。。因为在(1)中遍历时会从第二个开始遍历,
//所以边界问题得解决。
cout << max(maxMuti(arr,nums),arr[0]) << endl;
return 0;
}