?给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
?【注意】给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
?????输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。
原题请参考链接https://leetcode-cn.com/problems/maximum-product-of-three-numbers/
class Solution:
def maximumProduct(self, nums: List[int]) -> int:
nums.sort()
return max(nums[-1] * nums[-2] * nums[-3], nums[0] * nums[1] * nums[-1])
// 此方法的精妙之处在于一次遍历找出5个值,即最大值,第二大值,第三大值,最小值,次小值
// 问题的解无非两个最小的负数乘最大的正数【数组中有正负】,两个最小的负数乘最大的负数【数组中只有负】,
// 三个最大的正数相乘【数组中有正负或者只有正】
class Solution:
def maximumProduct(self, nums: List[int]) -> int:
# nums.sort()
# a = nums[-1] * nums[-2] * nums[-3]
# b = nums[0] * nums[1] * nums[-1]
# return max(a, b)
max1 = -float(‘inf‘) # 第一大的值
max2 = -float(‘inf‘) # 第二大的值
max3 = -float(‘inf‘) # 第三大的值
min1 = float(‘inf‘) # 第一小的值
min2 = float(‘inf‘) # 第二小的值
for num in nums:
if num > max1:
max3 = max2
max2 = max1
max1 = num
elif num > max2:
max3 = max2
max2 = num
elif num > max3:
max3 = num
if num < min1:
min2 = min1
min1 = num
elif num < min2:
min2 = num
return max(max1 * max2 * max3, max1 * min1 * min2)
原文:https://www.cnblogs.com/bladers/p/14304666.html