The following code handles negatives as well.
Time Complexity O(n)
Space Complexity O(1)
Code
package algos; public class maxThreeProd { public static int maxThree(int[] input) { if (input.length <= 3) { int ret = 1; for (int i = 0; i < input.length; i++) { ret *= input[i]; } return ret; } int m1 = Integer.MIN_VALUE; int m2 = Integer.MIN_VALUE; int m3 = Integer.MIN_VALUE; int l1 = Integer.MAX_VALUE; int l2 = Integer.MAX_VALUE; for (int i = 0; i < input.length; i++) { if (input[i] > m1) { m3 = m2; m2 = m1; m1 = input[i]; } else if (input[i] > m2) { m3 = m2; m2 = input[i]; } else if (input[i] > m3) { m3 = input[i]; } if (input[i] < l1) { l2 = l1; l1 = input[i]; } else if (input[i] < l2) { l2 = input[i]; } } return Math.max(l1 * l2 * m3, m1 * m2 * m3); } public static void main(String[] args) { int[] input = { 1, 5, 3, 2 }; if (input.length == 0) System.out.println("null"); else System.out.println(maxThree(input)); } }
Output
30