本题一开始没有想明白,其实并不难,大概分析一下几种可能性:
- 非负数的数量>=3:
- 3个最大的非负数:
- 如果最小的两个数是负数,则可能是
- 3个最大的非负数:
- 非负数的数量为2:
- 只有3个数:
- 比3个数多,则有2个或以上的负数,此时:
- 只有3个数:
- 非负数的数量为1:
- 结果必然是
- 结果必然是
- 非负数数量为0:
- 结果必然是最大的三个负数:
- 结果必然是最大的三个负数:
如上分析,只需要记录最大的3个数字: max1
, max2
, max3
,以及最小的2个数字: min1
, min2
解法如下:
class Solution {
public int maximumProduct(int[] nums) {
int max1 = Integer.MIN_VALUE;
int max2 = Integer.MIN_VALUE;
int max3 = Integer.MIN_VALUE;
int min1 = Integer.MAX_VALUE;
int min2 = Integer.MAX_VALUE;
for (int num : nums) {
if (num > max1) {
max3 = max2;
max2 = max1;
max1 = num;
}
else if (num > max2) {
max3 = max2;
max2 = num;
}
else if (num > max3) {
max3 = num;
}
if (num < min1) {
min2 = min1;
min1 = num;
}
else if (num < min2) {
min2 = num;
}
}
return Math.max(max1 * max2 * max3, max1 * min1 * min2);
}
}