题目
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
输入描述:
第一行是数组大小n,第二行是无序整数数组A[n]
输出描述:
满足条件的最大乘积
输入例子1:
4 3 4 1 2
输出例子1:
24
思路:
找出最小、次小,最大,次大,第三大的五个数,
乘积最大:1.最大*最小*次小 2.最大*次大*第三大
1和2 两种情况的最大值为所求结果。
include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
long min0=0,min1=0;
long max0=0,max1=0,max2=0;
for(int i=0;i<n;i++)
{
int num;
cin>>num;
if(num<min0)
{
min1=min0;
min0=num;
}
else if(num<min1)
{
min1=num;
}
if(num>max0)
{
max2=max1;
max1=max0;
max0=num;
}
else if(num>max1)
{
max2=max1;
max1=num;
}
else if(num>max2)
{
max2=num;
}
}
long long result=max(min0*min1*max0,max0*max1*max2);
cout<<result<<endl;
return 0;
}