Maximum Product of Three Numbers

update Sep 3,2018 14:32

LeetCodearrow-up-right

Given an integer array, find three numbers whose product is maximum and output the maximum product.

Example 1:

Input: [1,2,3]
Output: 6

Example 2:

Input: [1,2,3,4]
  Output: 24

Note:

The length of the given array will be in range [3,104] and all elements are in the range [-1000, 1000].

Multiplication of any three numbers in the input won't exceed the range of 32-bit signed integer.

Basic Idea:

求给定数组中乘积最大的三个数,考虑负数的情况,就只有两种可能:两个最小负数乘以最大的正数,或者三个最大的正数相乘。于是我们可以先求得整个数组中最小的两个数字和最大的三个数字,然后比较两种情况的乘积,取最大的。

具体的,我们可以用两个 PriorityQueue 分别求两个最小值和三个最大值,总时间复杂度为 O(n * (log(2) + log(3))) = O(n).

Java Code: