注意:是连续子数组;而子序列表示原来的顺序不变,但是可以除去中间的任意元素;
思路一:
- 将第一个值都和后面的每个值分别相乘,相乘的过程中找出最大值;
- 接着讲第二个值与后面的每个值分别相乘,找出最大值;
- 最后将最大值在比较出最终的最大值。
时间复杂度:O(n2)
int GetMax(int a[], const int &length)
{
int i=0,j=0;
int sum=a[0];
for(i=0;i<length;i++)
{
int sum2=a[i];
for(j=i+1;j<length;j++)
{
sum2 *= a[j];
if(sum2 > sum)
sum = sum2;
}
if(sum2 > sum)
sum = sum2;
}
return sum;
}
思路二:
- 如果无0且负数的个数为偶数,则将数组中所有数相乘即可;
- 如果无0且负数的个数为奇数,则定位最左边和最右边的负数的下标(pos1,pos2),然后将pos2左边的数全部