问题描述:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得 乘积最大,并且时间复杂度为(On)、空间复杂度为(0(1). 输人描述:无序整数数组a[w]。 输出描述:满足条件的最大乘积 要求JAVA代码 贪心算法实现
时间: 2023-12-10 10:40:35 浏览: 156
以下是Java实现的贪心算法:
```
import java.util.Arrays;
public class MaxProduct {
public static int maxProduct(int[] nums) {
int n = nums.length;
if (n < 3) {
return 0;
}
Arrays.sort(nums); // 先将数组排序
int max1 = nums[n - 1] * nums[n - 2] * nums[n - 3]; // 最大的三个数相乘
int max2 = nums[0] * nums[1] * nums[n - 1]; // 最小的两个数与最大的一个数相乘
return Math.max(max1, max2);
}
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4, 5};
System.out.println(maxProduct(nums)); // 输出:60
}
}
```
首先对数组进行排序,然后分两种情况讨论:
- 最大的三个数相乘
- 最小的两个数与最大的一个数相乘
取两种情况中的最大值即为所求的最大乘积。由于只需要用到一个常量变量来保存最大值,因此空间复杂度为O(1)。时间复杂度取决于排序算法,一般使用快速排序,时间复杂度为O(nlogn),满足要求。
阅读全文