The topic is not difficult:
Idea one (sort takes both ends)
Sort first, and the last three numbers multiply. (Soon I thought of it, but didn't want to be comprehensive [??])
Defect: Without considering the case of negative numbers, when there are at least two negative numbers, it is necessary to determine the maximum number multiplied by two minimum negative numbers and three maximum number to return the large one.
The code is as follows:
Public class Solution { publicint maximumproduct (int[] nums) { Arrays.sort (nums ); return Math.max (nums[nums.length-1] * nums[nums.length-2] * nums[nums.length-3], nums[0] * nums[1] * nums[nums.length-1
]);} }
Complexity analysis is mainly a sort of waste of comparison
Complexity of Time: O (N*LOGN)
Space complexity: O (N*LOGN)
Idea two (not sorted, only traversed once, save only three largest, and two smallest)
This topic get the representation of the maximum and minimum number of new skills. Integer.max_value Integer.min_value
Pay attention to the update can not only judge one, the other to judge, or lose the solution. The following procedure explains.
(Error code demonstration)
1 Public classSolution {2 Public intMaximumproduct (int[] nums) {3 if(Nums = =NULL|| Nums.length < 1) {4 return-1;5 }6 intMin1 =Integer.max_value;7 intMin2 =Integer.max_value;8 intMax1 =Integer.min_value;9 intMAX2 =Integer.min_value;Ten intMax3 =Integer.min_value; One A for(inti:nums) { - if(I <min1) { -Min2 =min1; theMin1 =i; - } - if(I >max1) { -Max3 =Max2; +MAX2 =max1; -Max1 =i; + } A } at returnMath.max (MAX1 * max2 * max3, min1 * min2 *max3); - } -}
(the correct code) Also note that the equal sign in the inequality cannot be omitted, because there may be equal conditions.
1 Public classSolution {2 Public intMaximumproduct (int[] nums) {3 if(Nums = =NULL|| Nums.length < 1) {4 return-1;5 }6 intMin1 =Integer.max_value;7 intMin2 =Integer.max_value;8 intMax1 =Integer.min_value;9 intMAX2 =Integer.min_value;Ten intMax3 =Integer.min_value; One A for(inti:nums) { - if(I<=min1) { -Min2 =min1; theMin1 =i; -}Else if(I >= min1 && i <=min2) { -Min2 = i;//don't forget to update min2 Oh, the following same ~ - } + if(I >=max1) { -Max3 =Max2; +MAX2 =max1; AMax1 =i; at}Else if(I <= max1 && i >=max2) { -Max3 =Max2; -MAX2 =i; -}Else if(I <= max2 && i >=max3) { -Max3 =i; - } in } - returnMath.max (MAX1 * max2 * max3, min1 * min2 *max1); to } +}
Analysis of complexity
Time complexity: O (N)
Space complexity: O (1)
"Leetcode" Array-2 (628)-the maximum number of three in the array is multiplied