最大乘积
最大乘积
http://www.nowcoder.com/questionTerminal/5f29c72b1ae14d92b9c3fa03a037ac5f
题解
难度:简单
知识点:数学逻辑
最大值只能出现在以下两种情况的较大值:
- 最大的三个正数的乘积
- 最小的两个负数*最大的正数的乘积
所以找出最大三个正数和最小的两个负数这5个数即可
但是这道题要求时间复杂度o(n),但是空间复杂度o(1)
如果先把所有数存到数组中,然后排序找出这5个数,那么空间复杂度为o(n)
所以不能将全部数存到数组再排序,只能在输入的过程中就把最大的三个数和最小的两个数存起来,最后比较最大值的组合即可
#include<iostream>
#include<limits.h>
using namespace std;
int main()
{
int i, n, num;
long long max_mul;
/* max1, max2, max3 分别为最大值,次大值,第三大值
* min1, min2 分别为最小值,次小值*/
long long max1, max2, max3, min1, min2;
max1 = max2 = max3 = INT_MIN;
min1 = min2 = INT_MAX;
cin >> n;
for(i = 0; i < n; i++)
{
cin >> num;
if(num < min1)
{
min2 = min1;
min1 = num;
}
else if(num < min2)
{
min2 = num;
}
if(num > max1)
{
max3 = max2;
max2 = max1;
max1 = num;
}
else if(num > max2)
{
max3 = max2;
max2 = num;
}
else if(num > max3)
{
max3 = num;
}
}
max_mul = max1*max2*max3 > max1*min1*min2 ? max1*max2*max3 : max1*min1*min2;
cout << max_mul << endl;
return 0;
}
查看26道真题和解析