解法:寻找前三大和最小的两个数,最后返回 前三大的乘积 和 最大值*最小的两个数 中的较大值
class Solution {
public:
/**
* 最大乘积
* @param A int整型一维数组
* @param ALen int A数组长度
* @return long长整型
*/
long long solve(int* A, int ALen) {
// write code here
int first = A[0];
int second = A[1];
int third = A[2];
int minFirst, minSecond;
if (A[0] > A[1] && A[0] > A[2])
{
first = A[0];
if(A[1] > A[2])
{
second = A[1];
minFirst = A[2];
minSecond = A[1];
}
else
{
third = A[2];
minFirst = A[1];
minSecond = A[2];
}
}
else if (A[1] > A[0] && A[1] > A[2])
{
first = A[1];
if(A[0] > A[2])
{
second = A[0];
minFirst = A[2];
minSecond = A[0];
}
else
{
third = A[2];
minFirst = A[0];
minSecond = A[2];
}
}
else if (A[2] > A[1] && A[2] > A[0])
{
first = A[2];
if(A[1] > A[0])
{
second = A[1];
minFirst = A[0];
minSecond = A[1];
}
else
{
third = A[0];
minFirst = A[0];
minSecond = A[1];
}
}
for(int i = 3; i < ALen; i++)
{
if (A[i] > first)
{
third = second;
second = first;
first = A[i];
}
else if (A[i] > second)
{
third = second;
second = A[i];
}
else if (A[i] > third)
{
third = A[i];
}
if(A[i] < minFirst)
{
minSecond = minFirst;
minFirst = A[i];
}
else if(A[i] < minSecond)
{
minSecond = A[i];
}
}
if (((long long)first * second * third) > ((long long)first * minFirst * minSecond))
return (long long)first * second * third;
else
return (long long)first * minFirst * minSecond;
}
}; 


京公网安备 11010502036488号