关闭

【机试题】3个数的最大乘积--拼多多2018校招内推编程题

标签: 编程题
354人阅读 评论(0) 收藏 举报

[编程题] 最大乘积
时间限制:1秒
空间限制:32768K
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
输入描述:
无序整数数组A[n]

输出描述:
满足条件的最大乘积

输入例子1:
4
3 4 1 2

输出例子1:
24

//思路是在输入过程中保存【最大的三个数】&【最小的二个数】
//判断下一个数是否进入最大前3位,只需判断它是否>3个数的最小值,如果成立,则替换掉这个最小值;最小前2位同理
//考虑到溢出问题,这里用long long
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
    int tmp;
    vector<long long> max;
    vector<long long> min;
    int n;
    cin >> n;
    while (n--) {
        cin >> tmp;
        sort(max.begin(), max.end(), greater<long long>());
        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 long a = max[0] * max[1] * max[2];
    long long b = min[0] * min[1] * max[0];
    cout << (a > b ? a : b) << endl;

    return 0;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8192次
    • 积分:970
    • 等级:
    • 排名:千里之外
    • 原创:93篇
    • 转载:5篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论