题目:
给出一个可能包含正数、零、负数的无序整数序列,从该序列中任选三个数计算乘积,求最大的乘积是多少?
要求:算法的时间复杂度为O(n),空间复杂度为O(1).
输入:
第一行输入n表示序列中整数的个数
第二行输入n个整数
输出;
最大的乘积
例如:
输入:
4
1 0 -2 -4
输出:
8
import java.time.temporal.ValueRange;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] array = new int[n];
for (int i = 0; i < array.length; i++) {
array[i] = scanner.nextInt();
}
int tem;
//用array[0],array[1],array[2] 表示前三个最大的数
//先对array[0],array[1],array[2]由大到小进行排序
if(array[1]>array[0])
{
tem = array[1];
array[1] = array[0];
array[0] = tem;
}
if(array[2]>array[0])
{
tem = array[2];
array[2] = array[1];
array[1] = array[0];
array[0] = tem;
}else {
if(array[2]>array[1])
{
tem = array[1];
array[1] = array[2];
array[2] = tem;
}
}
for(int i = 3;i<array.length;i++)
{
//更新最大的三个数
if(array[i]>array[0])
{
//交换这两个数
tem = array[0];
array[0] = array[i];
array[i] = tem;
}else{
if(array[i]>array[1])
{
tem = array[1];
array[1] = array[i];
array[i] = tem;
}else if(array[i]>array[2])
{
tem = array[2];
array[2] = array[i];
array[i] = tem;
}
}
//如果个数大于4 则用array[3]表示最小的数
if(i>3)
{
if(array[3] > array[i] )
{
tem = array[3];
array[3] = array[i];
array[i] = tem;
}
}
//如果个数大于5,则用array[4]表示第二小的数
if(i>4)
{
if( array[4] > array[i] )
{
tem = array[4];
array[4] = array[i];
array[i] = tem;
}
}
}
tem = array[0]*array[1]*array[2];
if(array.length == 3)
{
System.out.println(tem);
}
if(array.length == 4)
{
if(tem > (array[0]*array[2]*array[3]) )
{
System.out.println(tem);
}else{
System.out.println(array[0]*array[2]*array[3]);
}
}
if(array.length >=5)
{
if(tem > (array[0]*array[3]*array[4]))
{
System.out.println(tem);
}else{
System.out.println(array[0]*array[3]*array[4]);
}
}
}
}