class Solution {
public int maximumProduct(int[] nums) {
PriorityQueue<Integer> minQ = new PriorityQueue<>();
PriorityQueue<Integer> maxQ = new PriorityQueue<>((a, b)->{ return Integer.compare(b, a); });
for (int num : nums) {
minQ.offer(num);
if (minQ.size() > 3) minQ.poll();
maxQ.offer(num);
if (maxQ.size() > 2) maxQ.poll();
}
int max3 = minQ.poll();
int max2 = minQ.poll();
int max1 = minQ.poll();
int min2 = maxQ.poll();
int min1 = maxQ.poll();
return Math.max(min1 * min2 * max1, max1 * max2 * max3);
}
}