给你一个整型数组 nums
,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
输入:nums = [1,2,3] 输出:6
示例 2:
输入:nums = [1,2,3,4] 输出:24
示例 3:
输入:nums = [-1,-2,-3] 输出:-6
提示:
3 <= nums.length <= 104
-1000 <= nums[i] <= 1000
思路:这道题乍一眼看以为是送分题,但一提交直接解答错误,才发现自己没考虑完全。
第一眼就以为很简单地给数组排个序,然后返回最大的三个数的乘积即可,但是数组中的数可能有以下几种情况:
(1)全正数
(2)全负数
(3)有正有负
其中前两种情况很好解决,全正数或者全负数,最大的乘积一定是最大的三个数的乘积,所以用上面的思路就能解决;麻烦的是第三种,有正有负还分为两种情况,负数的个数少于2个和负数的个数等于或多于2个。若负数的个数少于2个也就是仅仅1个负数的情况,这个负数对最大的乘积不可能有帮助,最大乘积一定是取三个正数;若负数的个数等于或多于2个,那我们就得比较了,2个负数相乘能变成正数,若这两个负数的绝对值都很大,再乘上最大的正数,那就能得到很大的乘积,但我们还得和最大的三个正数的乘积做比较取更大的值。
代码(Python):
class Solution(object):
def maximumProduct(self, nums):
nums = sorted(nums)
number = 0
for i,num in enumerate(nums): #找负数的个数
if num < 0:
number += 1
if number <2:
return nums[-1] * nums[-2] * nums[-3]
else:
return max(nums[0]*nums[1]*nums[-1],nums[-1] * nums[-2] * nums[-3])