1.最大乘积:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
//分情况讨论,只需要找到最大和最小的几个数,所以用到sort
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char **argv)
{
long num; //用int就不行,注意
vector<long> h;
while (cin >> num)
{
h.push_back(num);
}
sort(h.begin(), h.end()); //从小到大排序
long cnt, cnt1, cnt2;
if ((*(h.end() - 1) <= 0) || (*(h.begin()+1) >= 0))
cnt = (*(h.end() - 1))*(*(h.end() - 2))*(*(h.end() - 3));
else
{
cnt1 = (*h.begin())*(*(h.begin() + 1))*(*(h.end() - 1));
cnt2 = (*(h.end() - 1))*(*(h.end() - 2))*(*(h.end() - 3));
cnt = (cnt1 >= cnt2) ? cnt1 : cnt2; //三目运算符使程序更简洁
}
cout << cnt << endl;
system("pause");
return 0;
}