给一个浮点数序列,取最大乘积子序列的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积子序列为3,0.5,8。
需要用两个变量保存包括当前位置序列的最大乘积和最小乘积,
然后还需要比较两次,一次是最大乘积和最小乘积是否需要互换,还有一次是不是只选当前位置就是最好的
double maxMulti(double v[], int n) {
double maxt = 1;
double mint = 1;
double maxv = v[0];
for(int i = 0; i < n; ++i) {
if(v[i] == 0) {
maxt = 1;
mint = 1;
if (v[i] > maxv)
maxv = 0;
}
else{
double oriMint = mint;
double oriMaxt = maxt;
double minrst = mint * v[i];
double maxrst = maxt * v[i];
maxt = maxrst > minrst ?maxrst: minrst;
mint = maxrst > minrst ? minrst : maxrst;
if (maxt < v[i])
maxt = v[i];
if (mint > v[i])
mint = v[i];
if (maxv < maxt)
maxv = maxt;
}
}
return maxv;
}