?LeetCode刷題實(shí)戰(zhàn)628:三個(gè)數(shù)的最大乘積
Given?an?integer?array?nums,?find?three?numbers?whose?product?is?maximum?and?return?the?maximum?product.
示例 1:
輸入:nums = [1,2,3]
輸出:6
示例 2:
輸入:nums = [1,2,3,4]
輸出:24
示例 3:
輸入:nums = [-1,-2,-3]
輸出:-6
排序后,如果數(shù)組中全是非負(fù)數(shù),則排序后最大的三個(gè)數(shù)相乘即為最大乘積;如果全是非正數(shù),則最大的三個(gè)數(shù)相乘同樣也為最大乘積。
如果數(shù)組中有正數(shù)有負(fù)數(shù),則最大乘積既可能是三個(gè)最大正數(shù)的乘積,也可能是兩個(gè)最小負(fù)數(shù)(即絕對值最大)與最大正數(shù)的乘積。

class?Solution?{
????public?int?maximumProduct(int[] nums)?{
????????int?min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;
????????int?max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE;
????????for(int?x : nums){
????????????if(x < min1){
????????????????min2 = min1;
????????????????min1 = x;
????????????}else?if(x < min2){
????????????????min2 = x;
????????????}
????????????if(x > max1){
????????????????max3 = max2;
????????????????max2 = max1;
????????????????max1 = x;
????????????}else?if(x > max2){
????????????????max3 = max2;
????????????????max2 = x;
????????????}else?if(x > max3){
????????????????max3 = x;
????????????}
????????}
????????return?Math.max(min1 * min2 * max1, max1 * max2 * max3);
????}
}
