给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,Java实现
时间: 2024-09-30 18:04:38 浏览: 28
为了找到一个无序整数数组中三个数的最大乘积,我们可以采用动态规划的方法。首先需要确定两个基本情况:如果数组中有负数,则最大乘积可能是正数;如果没有负数,那么最大的正乘积就是数组中的三个最大元素相乘。以下是Java代码实现的一个思路:
```java
public class MaxProductFinder {
public int[] findMaxProduct(int[] nums) {
// 初始化变量
int maxPositive = Integer.MIN_VALUE;
int minPositive = 0;
int maxNegative = Integer.MIN_VALUE;
// 遍历数组寻找最大最小的正数和负数
for (int num : nums) {
if (num > 0 && num > maxPositive) {
maxPositive = num;
} else if (num < 0 && num > maxNegative) {
maxNegative = num;
}
}
// 如果数组只有一个负数或没有负数,直接返回这三个数
if (maxNegative == Integer.MIN_VALUE || nums.length <= 2) {
return new int[]{maxPositive, maxPositive, maxPositive};
}
// 从剩下的元素中找最大的正数和最小的非零正数
int secondMaxPositive = 0;
for (int num : nums) {
if (num > 0 && num != maxPositive && num > secondMaxPositive) {
secondMaxPositive = num;
}
}
// 返回结果
return new int[]{maxPositive, secondMaxPositive, maxNegative};
}
}
```
这个函数会返回一个数组,其中包含了可以组成最大乘积的三个数。注意,这个解决方案假设输入数组至少有三个元素。
阅读全文