刷题之旅从数组类型的题目开始。第二十八道题目是三个数的最大乘积,对应leetcode的题号为628。

image

题目描述

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

示例 1:

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

示例 2:

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

注意:

  • 给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
  • 输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。

解题思路

这个题目要注意还有负数的存在。那么首先排序,然后结果也只有两种情况,第一种情况就是最后的三个数相乘,第二种情况就是前面两个数和最后一个数相乘。

  1. 考虑全是负数的情况:那么最大乘积就是最大的三个数之积
  2. 全是负数+一个零的情况:最大的乘积其实就是0,只要这个0参与计算就得到结果
  3. 考虑有负数有正数的情况:最大的乘积是最小的两个负数乘以最大的正数即可
  4. 考虑全是正数的情况:必然是最大的三个正数之积

综上考虑,其实就是比较两种计算结果就可以得到最大乘积了。

提交代码

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public int maximumProduct(int[] nums) {
//排序
Arrays.sort(nums);
int lastIndex = nums.length-1;
//只需要考虑两种情况,从中取出最大值即可
int res1 = (nums[0])*(nums[1])*((nums[lastIndex]));
int res2 = (nums[lastIndex-2])*(nums[lastIndex-1])*(nums[lastIndex]);
return res1>res2 ? res1 : res2;
}
}