给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
输入描述:
无序整数数组A[n]
输出描述:
满足条件的最大乘积
输入例子1:
4
3 4 1 2
输出例子1:
24
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int tmp;
vector<long> max;
vector<long> min;
while (n--) {
cin >> tmp;
sort(max.begin(), max.end(), greater<int>());
sort(min.begin(), min.end());
if (max.size() < 3) max.push_back(tmp);
else if (tmp > max[2]) max[2] = tmp;
if (min.size() < 2) min.push_back(tmp);
else if (tmp < min[1]) min[1] = tmp;
}
sort(max.begin(), max.end(), greater<int>());
sort(min.begin(), min.end());
long a = max[0] * max[1] * max[2];
long b = min[0] * min[1] * max[0];
cout << (a > b ? a : b) << endl;
return 0;
}