警告
本文最后更新于 2022-08-07,文中内容可能已过时。
628. 三个数的最大乘积
- 全是非负数:选择最大的三个非负数,即最大的三个数。
- 至少两个非负数,只有一个负数:
- 至少三个非负数:选择最大的三个非负数,即最大的三个数。
- 只有两个非负数:只有三个数可以选择,即最大的三个数。
- 至少一个非负数,只有两个负数:
- 至少三个非负数:选择最大的三个非负数,即最大的三个数;或者选择两个负数和最大的一个非负数,即最小的两个数和最大的一个数。
- 只有两个非负数:选择两个负数和最大的一个非负数,即最小的两个数和最大的一个数。
- 只有一个非负数:只有三个数可以选择,即最大的三个数。
- 全是负数:选择最小的三个负数,即最大的三个数。
综上,结果为最大的三个数和最小的两个数和最大的一个数中的更大值。
1
2
3
4
5
6
7
8
9
10
| class Solution {
public int maximumProduct(int[] nums) {
Arrays.sort(nums);
int n = nums.length;
return Math.max(
nums[n - 1] * nums[n - 2] * nums[n - 3], // 最大的三个数
nums[n - 1] * nums[0] * nums[1] // 最小的两个数和最大的一个数
);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| class Solution {
public int maximumProduct(int[] nums) {
int max1, max2, max3, min1, min2; // 最大的三个数、最小的两个数
max1 = max2 = max3 = Integer.MIN_VALUE;
min1 = min2 = Integer.MAX_VALUE;
for (int x : nums) {
if (x > max1) {
max3 = max2;
max2 = max1;
max1 = x;
} else if (x > max2) {
max3 = max2;
max2 = x;
} else if (x > max3) {
max3 = x;
}
if (x < min1) {
min2 = min1;
min1 = x;
} else if (x < min2) {
min2 = x;
}
}
return Math.max(max1 * max2 * max3, max1 * min1 * min2);
}
}
|