开始答题前先捋清楚数学逻辑:
出现最大乘积,只有两种可能
- 数组都是正数或都是负数,那最大的数就是三个最大的数相乘
- 数组有正有负,最大的数可能是两个最小的负数和最大的正数相乘
python实现
class Solution:
def solve(self , A: List[int]) -> int:
A.sort()
return max(A[0]*A[1]*A[-1], A[-1]*A[-2]*A[-3])
c++实现
class Solution {
public:
long long solve(int* A, int ALen) {
// write code here
vector<int> nums;
int *p;
for(p=A; p<(A+ALen); p++){ //循环数组,放到nums中
long long temp = *p;
nums.emplace_back(temp);
}
sort(nums.begin(), nums.end()); //排序
int len = nums.size();
long long max1 = nums[0]*nums[1]*nums[len-1]; //两个最小的数和一个最大的数
long long max2 = nums[len-1]*nums[len-2]*nums[len-3]; //三个最大的数
return max(max1, max2); //比较两种可能性,返回大的
}
};