682. Maximum Product of Three Numbers

Given an integer array, find three numbers whose product is maximum and output the maximum product.

Example 1:

1
2
Input: [1,2,3]
Output: 6

Example 2:

1
2
Input: [1,2,3,4]
Output: 24

Note:

The length of the given array will be in range [3,104] and all elements are in the range [-1000, 1000].
Multiplication of any three numbers in the input won't exceed the range of 32-bit signed integer.

解法1:

这题用3Sum smaller的思路,不过是简化了的版本。每对应一个数字,只需要考虑如果是负数时最小的乘积和如果是正数时最大的乘积。
C++

1

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Solution {
public int maximumProduct(int[] nums) {
if (nums.length == 0 ) {
return 0;
}
Arrays.sort(nums); // sort ascending
int res = Integer.MIN_VALUE;
int n = nums.length;
for (int i = 0; i < nums.length - 2; i++) {
if (nums[i] < 0) {
res = Math.max(res, nums[i] * nums[i + 1] * nums[n - 1]);
} else if (nums[i] > 0) {
res = Math.max(res, nums[n - 1] * nums[n - 2] * nums[i]);
} else {
res = Math.max(res, 0);
}
}
return res;
}
}