628. 三个数的最大乘积

题目

给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

示例 1:

1
2
输入: [1,2,3]
输出: 6

示例2:

1
2
输入: [1,2,3,4]
输出: 24

示例3:

1
2
输入:nums = [-1,-2,-3]
输出:-6

提示:

  1. 3 <= nums.length <= 10^4
  2. -1000 <= nums[i] <= 1000

解法

解法一:

排序,取最大的三个数相乘。最大的有两种情况,最后三个正整数的乘积,或者最前面的2个整数和最后一个整数的乘积

JAVA

1
2
3
4
public int maximumProduct(int[] nums) {
Arrays.sort(nums);
return Math.max(nums[nums.length - 1] * nums[nums.length - 2] * nums[nums.length - 3], nums[0] * nums[1] *nums[nums.length - 1]);
}

解法二:

线性扫描

JAVA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public int maximumProduct(int[] nums) {
int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;
int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE;
for (int n: nums) {
if (n <= min1) {
min2 = min1;
min1 = n;
} else if (n <= min2) { // n lies between min1 and min2
min2 = n;
}
if (n >= max1) { // n is greater than max1, max2 and max3
max3 = max2;
max2 = max1;
max1 = n;
} else if (n >= max2) { // n lies betweeen max1 and max2
max3 = max2;
max2 = n;
} else if (n >= max3) { // n lies betwen max2 and max3
max3 = n;
}
}
return Math.max(min1 * min2 * max1, max1 * max2 * max3);
}
0%