题目:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class TOP3 {
public static void main (String []args) throws NumberFormatException, IOException {
/* 这段输入部分的代码和下面Scanner的这段代码作用相同,两种方法进行比较,这段代码速度较快。
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String[] str = br.readLine().split(" ");
long[] nums = new long[str.length];
for(int i=0;i<str.length;i++){
nums[i] = Integer.parseInt(str[i]);
}
*/
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String[] num = str.split(" ");
long[] nums = new long[num.length];
for(int i=0;i<num.length;i++){
nums[i] = Integer.parseInt(num[i]);
}
TOP3 y = new TOP3();
y.getMaxMul(nums,num.length);
}
private void getMaxMul(long []arr,int len){
long min1=0,min2=0,max1=0,max2=0,max3=0;
for(int i=0;i<len;i++){
if (arr[i]<min1){
min2 = min1;
min1 = arr[i];
}
else if(arr[i]<min2){
min2 = arr[i];
}
else if(arr[i]>max1){
max3=max2;
max2=max1;
max1=arr[i];
}
else if(arr[i]>max2){
max3=max2;
max2=arr[i];
}
else if(arr[i]>max3){
max3=arr[i];
}
}
long result = max1*max2*max3 > max1*min1*min2?max1*max2*max3:max1*min1*min2;
System.out.print(result);
}
}