【算法题】最大乘积
来源:互联网 发布:知豆新能源图片 编辑:程序博客网 时间:2024/06/08 12:22
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
输入描述:
无序整数数组A[n]
输出描述:
满足条件的最大乘积
输入例子1:
4
3 4 1 2
输出例子1:
24
#include <iostream>#include <string>#include <cstring>#include <vector>#include <numeric>#include <algorithm>using namespace std;//#define debug_vector<long long> A;long long func(){ vector<long long > Positive(3,0); vector<long long> Negative(3,0); for (auto i = 0; i < A.size();++i) { if (A[i] > 0) { Positive[2] = max(Positive[1] * A[i], Positive[2]); Negative[2] = min(Negative[1] * A[i], Negative[2]); } else { Positive[2] = max(Negative[1] * A[i], Positive[2]); Negative[2] = min(Positive[1] * A[i], Negative[2]); } if (A[i] > 0) { Positive[1] = max(Positive[0] * A[i], Positive[1]); Negative[1] = min(Negative[0] * A[i], Negative[1]); } else { Positive[1] = max(Negative[0] * A[i], Positive[1]); Negative[1] = min(Positive[0] * A[i], Negative[1]); } Positive[0] = max(A[i], Positive[0]); Negative[0] = min(A[i], Negative[0]); } return Positive[2];}int main(){ int n; cin >> n; int tmp(0); A.resize(n); for (auto i = 0; i < n;++i) { cin >> A[i]; } cout << func() << endl; return 0;}
阅读全文
0 0
- 【算法题】最大乘积
- 算法提高 最大乘积
- 算法提高 最大乘积
- 算法提高 最大乘积
- 算法---最大连续乘积
- 算法提高 最大乘积
- 算法提高 最大乘积
- 算法提高 最大乘积
- 算法提高 最大乘积
- 算法提高 最大乘积
- 算法提高 最大乘积
- 算法提高 最大乘积
- 贪心算法之最大乘积
- 蓝桥杯算法训练 乘积最大
- 蓝桥杯 算法提高 最大乘积
- 蓝桥杯 算法提高 最大乘积
- 蓝桥杯 算法提高 最大乘积
- 最大子数组乘积算法
- Java条件对象(Condition)
- scrapy日志的设置方法
- MySQL存储引擎
- 引言之“级数求和”
- Unity_物体方向错乱问题与Space的关系与解决方法
- 【算法题】最大乘积
- 本篇文章主要记录如何在CentOS7.0上安装Chrome浏览器。
- linux 编译php扩展 openssl
- windows校准时间,与互联网同步
- 线性筛法(欧拉筛)
- fabric0.6交易处理流程及调用关系分析
- Java接口
- TAOCP中最大公约数算法理解
- 163yum源脱机文件的下载及安装