class Solution {
public:
int maximumProduct(vector<int>& nums) {
int m1 = INT_MAX, m2 = INT_MAX;
int b1 = INT_MIN, b2 = INT_MIN, b3 = INT_MIN;
for(int i = 0; i < nums.size(); i++) {
if (nums[i] <= m1) {
m2 = m1;
m1 = nums[i];
} else if (nums[i] <= m2) {
m2 = nums[i];
}
if (nums[i] >= b1) {
b3 = b2;
b2 = b1;
b1 = nums[i];
} else if (nums[i] >= b2) {
b3 = b2;
b2 = nums[i];
} else if (nums[i] >= b3) {
b3 = nums[i];
}
}
int r1 = m1 * m2 * b1;
int r2 = b1 * b2 * b3;
return r1 > r2 ? r1 : r2;
}
};