抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

题目描述

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

实例

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

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

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

解题方法

方法一:排序

首先将数组排序。

如果数组中全是非负数,则排序后最大的三个数相乘即为最大乘积;如果全是非正数,则最大的三个数相乘同样也为最大乘积。

如果数组中有正数有负数,则最大乘积既可能是三个最大正数的乘积,也可能是两个最小负数(即绝对值最大)与最大正数的乘积。

综上,我们在给数组排序后,分别求出三个最大正数的乘积,以及两个最小负数与最大正数的乘积,二者之间的最大值即为所求答案。

1
2
3
4
5
6
7
class Solution {
public int maximumProduct(int[] nums) {
int n = nums.length;
Arrays.sort(nums);
return Math.max(nums[0] * nums[1] * nums[n - 1], nums[n - 1] * nums[n -2] * nums[n - 3]);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    class Solution {
public int maximumProduct(int[] nums) {
// 最小的和第二小的
int minOne = Integer.MAX_VALUE, minTwo = Integer.MAX_VALUE;
// 最大的、第二大的和第三大的
//获取三个最大的
int maxOne = Integer.MIN_VALUE; // 第一大的
int maxTwo = Integer.MIN_VALUE; // 第二大的
int maxThree = Integer.MIN_VALUE; // 第三大的

//遍历数组
for (int num : nums) {
//插入位置确定
if (num < minOne) {
minTwo = minOne;
minOne = num;
} else if (num < minTwo) {
minTwo = num;
}

//插入位置确定
if (num > maxOne) {
maxThree = maxTwo;
maxTwo = maxOne;
maxOne = num;
} else if (num > maxTwo) {
maxThree = maxTwo;
maxTwo = num;
} else if (num > maxThree) {
maxThree = num;
}
}
return Math.max(minOne * minTwo * maxOne, maxOne * maxTwo * maxThree);
}
}

用户交流区

温馨提示: 遵纪守法, 友善评论!





津ICP备19009605号

WordCount24k