[10]最大乘积-拼多多2018

1.题目描述

给定一个无序数组,包含正数、负数和 0,要求从中找出 3 个数的乘积,使得乘积最大,要求时间复杂度: O(n),空间复杂度:O(1)

  • 输入描述:
    第一行是数组大小 n,第二行是无序整数数组 A[n]。n >=3
  • 输出描述:
    满足条件的最大乘积
  • 输入示例:
    4 
    3 4 1 2
    
  • 输出示例:
    24
    

2.题目解析

数列有以下三种情况:

  1. 全是正数
  2. 全是负数
  3. 有正有负

乘积最大只有两种情况:

  1. 三个最大正数
  2. 一个最大整数和两个最小负数

问题最终归结为找出这五个数比较乘积即可。

3.参考答案

#include <bits/stdc++.h>
using namespace std;

int main() {
   int n = 0;
   scanf("%d",&n);
   long long nums[n];
   fill_n(nums,n,0);
   for(int i=0;i<n;++i){
       scanf("%lld",&nums[i]);
   }
   sort(nums,nums+n);
   long m = max(nums[n-1]*nums[n-2]*nums[n-3],nums[n-1]*nums[0]*nums[1]);
   printf("%lld",m);
   return 0;
}

注意:两个long数字相乘,结果可能大于long最大值,所以,乘积放入long long,防止溢出。

牛客题目

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 14,088评论 6 13
  • 1. 找出数组中重复的数字 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,...
    BookThief阅读 5,915评论 0 2
  • 姓名:张弛 公司:沈阳防锈包装材料有限责任公司 【六项精进打卡第126天】 【知~学习】 阅读《六项精进》大纲0遍...
    Leo_zhang阅读 1,081评论 0 0
  • 这几天思考一个问题,为什么我国北方地区雾霾长时间不散,政府限产限号此起彼伏,甚至小吃摊都关了,但雾霾仍像瘟神一般,...
    czscada阅读 1,873评论 0 0
  • 2015年春天到2018年夏天,曦羽在山水度过了美好的三年半,回想这段时光,真的不得不感恩的说,这是我和她人生中最...
    我是YY翼阅读 2,726评论 0 0

友情链接更多精彩内容