首页 > 其他 > 详细

628. 三个数的最大乘积

时间:2021-01-20 23:28:21      阅读:31      评论:0      收藏:0      [点我收藏+]

题目描述

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

?【注意】给定的整型数组长度范围是[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)

628. 三个数的最大乘积

原文:https://www.cnblogs.com/bladers/p/14304666.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!