N个整数,求其中任意N-1个数的乘积中的最大的一个。
N个整数,求其中任意N-1个数的乘积中的最大的一个。
例如 3,2,1,则最大的是3*2=6
提示:整数包括0和负数
要求给出个比较有效率的算法
我的函数实现:
long GetMaxValueInCumulation(long plIntegerNumbers[],long lIntegerNumbersCount)
{
long lMinIntegerNumber = 1<<sizeof(long);
//不合法输入返回最大的整数
if(!plIntegerNumbers || lIntegerNumbersCount <= 0)
return (lMinIntegerNumber);
long lReturnValue = 1;
long lMaxNegativeValue = 0;
long lNegativeValueCount = 0;
long lIndex = 0;
//中间处理变量
long lCumulationDataIndex = 0;
long plCumulationData = new long[lIntegerNumbersCount];
if(!plCumulationData)
return (lMinIntegerNumber);
memset(plCumulationData,0,lIntegerNumbersCount];
//去掉最小值及0值及处理负数的情况
for(lIndex = 0; lIndex < lIntegerNumbersCount;lIndex++)
{
if( plIntegerNumber[lIndex] > 0 && plIntegerNumbers[lIndex] < lMinIntegerNumber )
lMinIntegerNumber = plIntegerNumbers[lIndex];
if( plIntegerNumbers[lIndex] < 0 )
lNegativeValueCount++;
if(plIntegerNumbers[lIndex] < 0 && lMaxNegativeValue < plIntegerNumbers[lIndex] )
lMaxNegativeValue = plIntegerNumbers[lIndex];
if(plIntegerNumber[lIndex])
plCumulationData[lCumulationDataIndex++] = plIntegerNumber[lIndex];
}
//计算结果
if(lNegativeValueCount < 1)
{
for(lIndex = lCumulationDataIndex - 1;lIndex >= 0;lIndex--)
lReturnValue *= plCumulationData[lIndex];
}
else
{
if(lNegativeValueCount % 2 )
{
for(lIndex = lCumulationDataIndex - 1;lIndex >= 0;lIndex--)
{
if(lMaxNegativeValue == plCumulationData[lIndex] )
continue;
lReturnValue *= plCumulationData[lIndex];
}
}
else
for(lIndex = lCumulationDataIndex - 1;lIndex >= 0;lIndex--)
lReturnValue *= plCumulationData[lIndex];
}
delete []plCumulationData;
return (lReturnValue);
}
学习学习别人更好的办法:)