本题一开始没有想明白,其实并不难,大概分析一下几种可能性:
- 非负数的数量>=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);}}
