[编程题] 最大乘积

来源:互联网 发布:手机验证码php源码 编辑:程序博客网 时间:2024/06/04 18:43

给定一个无序数组,包含正数、负数和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;}
原创粉丝点击