628. 三个数的最大乘积(傻瓜教程)(python)(LC)

628. 三个数的最大乘积

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


示例 1:

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

示例 2:

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

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

解题

基本思路:最大乘积的组合可能为(+,+,+)或(+,-,-)

一、排序(调用函数)

class Solution:
    def maximumProduct1(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)

二、排序(排序的具体展开)(数组的动态维护)

class Solution:
    def maximumProduct(self, nums: List[int]) -> int:
        a = b = c = float('-inf')
        d = e = float('inf')
        for i, num in enumerate(nums):
            # 更新最大三个数
            if num > a:
                a, b, c = num, a, b
            elif num > b:
                b, c = num, b
            elif num > c:
                c = num
            # 更新最小两个数
            if num < d:
                d, e = num, d
            elif num < e:
                e = num

        return max(d * e * a, a * b * c)

猜你喜欢

转载自blog.csdn.net/qq_51174011/article/details/112908388