Advertisement

解决最大乘积问题 C++代码实现

阅读量:

问题描述

对于一个未排序的数组,其中包含正数、负数以及零,需要从中选取三个数值,使其乘积达到最大值,同时满足时间复杂度为O(n),空间复杂度为O(1)的要求。

输入描述

一个未排序的整数数组a[n]

输出描述

符合要求的最大乘积值。

输入样例解析

4
3 4 1 2

输出样例

24

算法思路

设定两个存储结构,用于保存数值中最大的三个正数以及最小的两个负数(需考虑负数相乘后结果为正的情况)。随后对数组进行一次完整遍历,每当处理到一个元素时,将其与相应的存储结构进行比较,并根据需要更新其中的内容。最终,比较三个正数中最小的两个数的乘积与两个负数乘积的大小关系,再将较大的乘积与最大的正数相乘,从而得出最终结果。

复制代码
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    void compare(vector<int> &v ,int k ,bool control) //根据判断正负,来进行不一样的选择
    {
    if(k > v.front() && control == true) //如果是正数,头最小,和最小比较,来相对获得更大的

全部评论 (0)

还没有任何评论哟~