解决最大乘积问题 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)
还没有任何评论哟~
