首页 > 试题广场 >

最大乘积

[编程题]最大乘积
  • 热度指数:119863 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)

输入描述:
输入共2行,第一行包括一个整数n,表示数组长度
第二行为n个以空格隔开的整数,分别为A1,A2, … ,An


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

输入

4
3 4 1 2

输出

24
头像 牛客题解官
发表于 2020-06-05 18:21:13
精华题解 题解 难度:简单 知识点:数学逻辑 最大值只能出现在以下两种情况的较大值: 最大的三个正数的乘积 最小的两个负数*最大的正数的乘积 所以找出最大三个正数和最小的两个负数这5个数即可但是这道题要求时间复杂度o(n),但是空间复杂度o(1)如果先把所有数存到数组中,然后排序找出这5个数,那么空间复杂 展开全文
头像 fred-coder
发表于 2022-03-01 14:43:38
对数组进行排序; 若均为正数或均为负数或负数个数<2,则最大值应为 data[-1] * data[-2] * data[-3] 若负数数量为2 则最大值可能为 data[0] * data[1] * data[-1] 最大值为二者之一 import sys n = int(sys.std 展开全文
头像 健康快乐最重要
发表于 2020-03-14 17:29:49
//确定五个数 //1.当题目中全是正数或者全是负数的时候,三个最大的相乘(max1,max2,max3)。 //2.部分正数或者部分负数的时候,正数最大数*两个负数最小数(max1*min1*min2),两个正数最大数*一个负数最大数(包含在1中) #include<iostream> 展开全文
头像 嘉然今天吃晚晚
发表于 2020-08-01 13:11:40
最大积res只有两种情况,res=Max(最大的数 次大的数 第三大的数,最大的数 最小的数 次小的数)举例说明的话就是,如:[1,2,3,4],[-4,-3,-2,-1],[-2,-1,0,100,200,300]都是取第一种情况如[-200,-100,0,1,2,3]就是取第二种情况 publi 展开全文
头像 围城mmn
发表于 2024-04-17 20:59:10
import sys n = int(input()) lis = list(map(int,input().split())) lis.sort() ans = max(lis[0]*lis[1]*lis[-1],lis[-1]*lis[-2]*lis[-3]) print(ans)
头像 zzfyupup
发表于 2022-11-03 17:38:43
#include <stdio.h> #include<malloc.h> /* 最大值只有两种情况 最大的三个正数的乘积 最小的两个负数*最大的正数的乘积 */ int main() { int n, i; scanf("%d", &n); 展开全文
头像 (≧∇≦)三玖
发表于 2019-09-13 15:40:22
方法一1 维持正数的前三的一个列表2 负数后三的一个列表3 0单独一个列表长为三然后负列表+0列表+正列表 return max(result[0]*result[1]*result[-1],result[-3]*result[-2]*result[-1])如下 def pri(m,a): 展开全文
头像 帅气的风
发表于 2023-03-16 14:17:17
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new S 展开全文
头像 牛客136122074号
发表于 2023-11-15 15:59:56
#include <stdio.h> #define INT_MIN (-2147483647) #define INT_MAX (2147483647) int main() { int i, n, num; long long max_mul; long long ma 展开全文
头像 奋斗的小丁
发表于 2023-04-20 23:44:27
#include<stdio.h> int main() { int n; long long arr[1000000];//定义一个足够大的数组 scanf("%d",&n); getchar(); for(int i=0;i<n;i++ 展开全文
头像 小Cen
发表于 2023-04-11 17:44:50
先排序, 然后取 下标0、1、2 乘积与 0、倒数1、倒数2的乘积比较谁大,因为有可能0为最大整数, 倒数1、2为最小的负数。负负得正 import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { 展开全文