https://leetcode.com/problems/maximum-product-of-three-numbers/description/
Solution 1. O(n) version of Solution 2.
int maximumProduct(vector<int>& nums) {
int N = nums.size();
int mx1 = INT_MIN, mx2 = INT_MIN, mx3 = INT_MIN, mi1 = INT_MAX, mi2 = INT_MAX;
for(int n : nums) {
if(n>mx1){
mx3 = mx2;
mx2 = mx1;
mx1 = n;
}
else if(n>mx2) {
mx3 = mx2;
mx2 = n;
}
else if(n>mx3) {
mx3 = n;
}
if(n<mi1) {
mi2 = mi1;
mi1 = n;
}
else if(n<mi2){
mi2 = n;
}
}
return max(mx1*mx2*mx3, mx1*mi1*mi2);
}
Solution 2.
int maximumProduct(vector<int>& nums) {
int N = nums.size();
sort(nums.begin(),nums.end());
if(nums[0]>=0 || nums[N-1]<=0) return nums[N-1]*nums[N-2]*nums[N-3]; //could skip this
// the maximum would be the bigger one of the two cases:
return max(nums[0]*nums[1]*nums[N-1], nums[N-1]*nums[N-2]*nums[N-3]);
}
No comments:
Post a Comment