Two possibilities: 1. biggest three positive numbers 2. smallest two negative numbers * biggest number
Solution:
Time: O(nlogn) Space: O(1)
public class Solution { public int maxp3(ArrayList<Integer> A) { Collections.sort(A, Collections.reverseOrder()); int p = 1; for (int i = 0; i < 3; i ++) { p *= A.get(i); } int m = p; if (A.get(A.size() - 1) < 0 && A.get(A.size() - 2) < 0) { m = A.get(A.size() - 1) * A.get(A.size() - 2) * A.get(0); } return Math.max(p, m); } }