继续刷牛客真题,求一个给定数组中,某三个数的乘积的最大值。
分析:
首先对于给定的数组,可能是乱序的,就需要对数组进行排序,按照从下到大排序的时候,最大乘积分两种可能,一种是最大,次大,次次大三个数,一种是最大,最小,次小(可能存在负数的情况)。然后比较两种情况的大小,输出较大的。
问题:
1、Python中sorted函数返回的是一个新的列表。
2、bug:如果输入的数的个数小于3,那么结果会是多少???
附上C++代码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int n;
cin>>n;
vector<long long> A;
long long x;
for(int i=0;i<n;i++)
{
cin>>x;
A.push_back(x);
}
if(n<3)
cout<<0<<endl;
else
{
sort(A.begin(),A.end());
long long r=max(A[0]*A[1]*A[n-1],A[n-3]*A[n-2]*A[n-1]);
cout<<r<<endl;
}
return 0;
}
附上Python代码:
n=int(input())
A=list(map(int,input().split()))
A=sorted(A)
print(max(A[0]*A[1]*A[-1],A[-1]*A[-2]*A[-3]))