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; } } } }