import java.util.*;
public class Solution {
/**
* 最大乘积
* @param A int整型一维数组
* @return long长整型
*/
public long solve (int[] A) {
// write code here
long result = 0L;
if(A.length == 3){
result = A[0] * A[1] * A[2];
return result;
}
ArrayList<Long> neg = new ArrayList<>();
ArrayList<Long> pos = new ArrayList<>();
long result1 = 0L;
long result2 = 0L;
for(int i = 0; i < A.length; i++){
if(A[i] < 0){
neg.add((long)A[i]);
}
else{
pos.add((long)A[i]);
}
}
Collections.sort(neg, new Comparator<Long>(){
@Override
public int compare(Long num1, Long num2){
if(num1 > num2){
return 1;
}
else{
return -1;
}
}
});
Collections.sort(pos, new Comparator<Long>(){
@Override
public int compare(Long num1, Long num2){
if(num1 > num2){
return 1;
}
else{
return -1;
}
}
});
if (neg.size() < 2){
result = pos.get(pos.size() - 1) * pos.get(pos.size() - 2) * pos.get(pos.size() - 3);
return result;
}
else if(pos.size() == 2){
result = pos.get(pos.size() - 1) * neg.get(0) * neg.get(1);
return result;
}
else if (pos.size() == 0) {
result = neg.get(0) * neg.get(1) * neg.get(2);
return result;
}
else{
result1 = pos.get(pos.size() - 1) * pos.get(pos.size() - 2) * pos.get(pos.size() - 3);
result2 = pos.get(pos.size() - 1) * neg.get(0) * neg.get(1);
if((result1 - result2) >= 0){
return result1;
}
else{
return result2;
}
}
}
}