6个数组成乘积最大,
NC106三个数的最大乘积
描述一个长度为的无序数组,包含正数,负数和0。请从中找出3个数字,以最大化产品并退回此产品。
所需的时间复杂度:空间复杂度:
数据范围:
示例1输入:
[3,4,1,2]返回值:
24.分类解决方案的想法:
先对数组进行排序,判断负数k的个数是否大于等于2k且小于2,最大值为最后三个正数的乘积;否则,最大的三个数可能是最后三个正数的乘积,也可能是最小的两个负数和最大的正数的乘积。注意:
其实我们不需要neg_count,可以直接计算乘积,不管最小的2个数是不是负数。
代码如下:
#包含位/标准数据。h
使用命名空间std
long long solve(int *A,int ALen)
{
std:sort(A,A ALen);
int neg _ count=0;
while (A[neg_count] 0)
{
neg _计数;
}
if (neg_count 2)
{
返回A[阿伦-1]* A[阿伦-2]* A[阿伦-3];
}
long long ans=A[0];
ans *=A[1];
long long b=A[阿伦-2]* A[阿伦-3];
返回A[ALen - 1] * std:max(ans,b);
}未分类的解决方案想法:
其实我们只需要找到最小的2个数和最大的3个数,然后根据上面的分析直接比较两种情况的乘积。
代码省略~ ~
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。