/*
* @lc app=leetcode.cn id=628 lang=typescript
*
* [628] 三个数的最大乘积
*/
//最大积可能是最大三正值积或是最大正值与最小两负值乘积
// @lc code=start
function maximumProduct(nums: number[]): number {
let first = -Infinity,
second = -Infinity,
third = -Infinity,
min1 = Infinity,
min2 = Infinity;
for (let i = 0; i < nums.length; i++) {
//求最小值
if (nums[i] < min1) {
min2 = min1;
min1 = nums[i];
}
//求第二小值
else if (nums[i] < min2) {
min2 = nums[i];
}
//求最大值
if (nums[i] > first) {
third = second;
second = first;
first = nums[i];
}
//求第二大值
else if (nums[i] > second) {
third = second;
second = nums[i];
}
//求第三大值
else if (nums[i] > third) {
third = nums[i];
}
}
return first * second * third > min1 * min2 * first
? first * second * third
: min1 * min2 * first;
}
// @lc code=end