给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
输入: [1,2,3]
输出: 6
示例 2:
输入: [1,2,3,4]
输出: 24
注意:
给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。
主要分成两种情况:
可能是两个最小负数乘以一个最大的正数最大,也可能是三个正数比较大
照例,也是一遍就成功
代码
class Solution {
public int maximumProduct(int[] nums) {
int max[] = {Integer.MIN_VALUE,Integer.MIN_VALUE,Integer.MIN_VALUE};
int min[] = {Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE};
for (int i = 0; i < nums.length; i++) {
int j = nums[i];
if(j > max[0]){
if(j > max[1]){
if(j > max[2]){
max[0] = max[1];
max[1] = max[2];
max[2] = j;
}else {
max[0] = max[1];
max[1] = j;
}
}else {
max[0] = j;
}
}
if(j < min[0]){
if(j < min[1]){
if(j < min[2]){
min[0] = min[1];
min[1] = min[2];
min[2] = j;
}else {
min[0] = min[1];
min[1] = j;
}
}else {
min[0] = j;
}
}
}
int max1 = max[0] * max[1] * max[2];
int max2 = min[1] * min[2] * max[2];
return max2 > max1? max2:max1;
}
}
排名靠前的代码
class Solution {
public int maximumProduct(int[] nums) {
if (nums == null || nums.length < 3)
{
return 0;
}
int[] max = new int[]{Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE};
int[] min = new int[]{Integer.MAX_VALUE, Integer.MAX_VALUE};
for (int i : nums)
{
if (i > max[0])
{
max[0] = i;
Arrays.sort(max);
}
if (i < min[1])
{
min[1] = i;
Arrays.sort(min);
}
}
int a = max[0] * max[1] * max[2];
int b = min[0] * min[1] * max[2];
return a > b ? a : b;
}
}