Maximum Product of Three Numbers
Problem statement
Given an integer array nums, find three numbers whose product is maximum and return the maximum product.
Example 1:
Input: nums = [1,2,3]Output: 6
Example 2:
Input: nums = [1,2,3,4]Output: 24
Example 3:
Input: nums = [-1,-2,-3]Output: -6
Constraints:
3 <= nums.length <= 104-1000 <= nums[i] <= 1000
My solution
/**
* @param {number[]} nums
* @return {number}
*/
var maximumProduct = function(nums) {
let maxNumbers = Array.from({
length: 3
}, () => Number.MIN_SAFE_INTEGER)
let minNumbers = Array.from({
length: 2
}, () => Number.MAX_SAFE_INTEGER)
for (const num of nums) {
if (num <= minNumbers[0]) {
// n is less than minNumbers[0 & 1]
[minNumbers[0], minNumbers[1]] = [num, minNumbers[0]]
} else if (num <= minNumbers[1]) {
[minNumbers[1]] = [num]
}
if (num >= maxNumbers[0]) {
// num is greater than maxNumbers[0]
[maxNumbers[0], maxNumbers[1], maxNumbers[2]] = [num, maxNumbers[0], maxNumbers[1]]
} else if (num >= maxNumbers[1]) {
[maxNumbers[1], maxNumbers[2]] = [num, maxNumbers[1]]
} else if (num >= maxNumbers[2]) {
[maxNumbers[2]] = [num]
}
}
// console.log(minNumbers, maxNumbers)
return Math.max(product([...minNumbers, maxNumbers[0]]), product(maxNumbers))
};
function product(arr) {
return arr.reduce((acc, curr) => {
return acc *= curr
}, 1)
}