牛客刷题-最大乘积
Posted Calm微笑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客刷题-最大乘积相关的知识,希望对你有一定的参考价值。
题目描述
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
输入描述:
无序整数数组A[n]
输出描述:
满足条件的最大乘积
示例1
输入
复制
3 4 1 2
输出
复制
24
吐槽一下样例数据。。。
题目上给的输入是没有的n 的,实际的测试数据是有n 的即输入数据应该是4 3 4 1 2
Java实现
import java.util.Scanner;
public class Main
public static void main(String[] args)
Scanner in = new Scanner(System.in);
while (in.hasNext())
int n = in.nextInt();
long a[] = new long[n + 1];
long max1 = 0, max2 = 0, max3 = 0, min1 = 0, min2 = 0;
long temp;
for (int i = 0; i < n; i++)
a[i] = in.nextLong();
if (a[i] == 0)
continue;
if (a[i] > 0)
if (a[i] > max3)
max3 = a[i];
if (max3 > max2)
temp = max3;
max3 = max2;
max2 = temp;
if (max2 > max1)
temp = max1;
max1 = max2;
max2 = temp;
else
if (a[i] < min2)
min2 = a[i];
if (min2 < min1)
temp = min2;
min2 = min1;
min1 = temp;
long f = max1;
if (max2 * max3 > min1 * min2)
f = f * max2 * max3;
else
f = f * min1 * min2;
System.out.println(f);
in.close();
Python 实现
import sys
n = int(sys.stdin.readline())
l=list(map(int,sys.stdin.readline().split()))
max1=0
max2=0
max3=0
min1=0
min2=0
for i in l:
if i is 0:
continue
elif i >0:
if i>max3:
max3,i=i,max3
if max3>max2:
max2,max3=max3,max2
if max2>max1:
max1,max2=max2,max1
else:
if i<min2:
min2,i=i,min2
if min2<min1:
min1,min2=min2,min1
print(max1*max(max2*max3,min1*min2))
以上是关于牛客刷题-最大乘积的主要内容,如果未能解决你的问题,请参考以下文章