304. 最大乘积
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大
样例
输入: nums = [3,4,1,2]
输出: 24
注意事项
-
nums.size <= 500000 n u m s . s i z e < = 5 0 0 0 0 0
-
-10000 <= nums[i] <= 10000 − 1 0 0 0 0 < = n u m s [ i ] < = 1 0 0 0 0
public class Solution {
/**
* @param nums: Unordered array
* @return: return the largest product
*/
public long MaximumProduct(int[] nums) {
// write your code here
long a = Long.MIN_VALUE;
long b = Long.MIN_VALUE;
long c = Long.MIN_VALUE;
long d = Long.MAX_VALUE;
long e = Long.MAX_VALUE;
for (int num : nums) {
if (num > 0) {
if (num > a) {
c = b;
b = a;
a = num;
} else if (num > b) {
c = b;
b = num;
} else if (num > c) {
c = num;
}
} else {
if (num < d) {
e = d;
d = num;
} else if (num < e) {
e = num;
}
}
}
return a * Math.max(b * c, d * e);
}
}
public class Solution {
/**
* @param nums: Unordered array
* @return: return the largest product
*/
public long MaximumProduct(int[] nums) {
// write your code here
for (int i = 0; i < 3; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] < nums[j]) {
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
}
if (nums[nums.length - 1 - i] > nums[j - i]) {
int temp = nums[j - i];
nums[j - i] = nums[nums.length - 1 - i];
nums[nums.length - 1 - i] = temp;
}
}
}
long a = nums[1] * nums[2];
long b = nums[nums.length - 1] * nums[nums.length - 2];
return nums[0] * Math.max(a, b);
}
}