• Python编程题36三个数的最大乘积


    题目

    给定一个整数列表 nums ,且 nums 中至少含有3个整数,请在列表中找出由三个数组成的最大乘积,并输出这个乘积。

    例如:

    给定一个列表:[1, 2, 3],返回结果:6

    给定一个列表:[1, 2, -3, -3, 0],返回结果:18

    实现思路1

    • 使用 排序 的方式来实现,但时间复杂度为 O(nlog(n))
    • 先对 nums 进行排序,排序后就可获取到 nums 中最小的数 min1、第二小的数 min2、最大的数 max1、第二大的数 max2、第三大的数 max3
    • 最大乘积只会有2种组合情况:max1 * max2 * max3、max1 * min1 * min2(因为 min1、min2均为负数时,相乘可变为正数),从而可以得到最大乘积。

    代码实现1

    def maximumProduct(nums):
        nums.sort()
        return max(nums[0] * nums[1] * nums[-1], nums[-3] * nums[-2] * nums[-1])
    

    实现思路2

    • 不使用排序,直接遍历一次列表即可,时间复杂度O(n)
    • 定义 min1、min2 为一个无穷大的数,所有数都比它们小;定义 max1、max2、max3 为一个无穷小的数,所有数都比它们大
    • 遍历过程中,如果当前整数小于 min1 ,那么将 min1 置为当前整数,同时需将 min2 置为原来的 min1 ;如果当前整数大于等于 min1 且小于 min2 , 那么将 min2 置为当前整数即可
    • 遍历过程中,如果当前整数大于 max1,那么将 max1 置为当前整数,同时需将 max2、max3 置为原来的 min1、max2;如果当前整数小于等于 max1 且大于 max2,那么将 max2 置为当前整数,同时需将 max3 置为原来的 max2;如果当前整数小于等于 max2 且大于 max3,那么将 max3 置为当前整数即可

    代码实现2

    def maximumProduct(nums):
        min1, min2 = float("inf"), float("inf")  # 定义一个无穷大的数,所有数都比 inf 小
        max1, max2, max3 = float("-inf"), float("-inf"), float("-inf")  # 定义一个无穷小的数,所有数都比 -inf 大
        for num in nums:
            if num < min1:
                min1, min2 = num, min1
            elif num < min2:
                min2 = num
            if num > max1:
                max1, max2, max3 = num, max1, max2
            elif num > max2:
                max2, max3 = num, max2
            elif num > max3:
                max3 = num
        num_product1 = max1 * max2 * max3
        num_product2 = max1 * min1 * min2
        return num_product1 if num_product1 > num_product2 else num_product2
    

    更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)

    作者:wintest
    本文版权归作者和博客园共有,欢迎转载,但必须在文章页面明显位置给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    javaScript中eval()方法转换json对象
    JS 根据参数是否为空进行true|false判断呢
    mybatis返回map类型数据空值字段不显示(三种解决方法)
    值类型与引用类型的区别
    随机生成四位数字和字母
    彩票
    冒泡排序
    查询资料:二分查找法
    随机数生成机制
    运算符
  • 原文地址:https://www.cnblogs.com/wintest/p/15678797.html
Copyright © 2020-2023  润新知