【leetcode】628.三个数的最大乘积

前言:剑指offer刷题系列

问题:

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

示例:

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

思路1:

  1. 先去计算输入列表 nums 的长度,并将结果存储在变量 nlen 中。这是为了后面的条件判断做准备。

  2. 然后通过比较列表的长度 nlen 是否等于 3 来检查列表中是否有且仅有三个元素。如果是的话,就直接返回这三个元素的乘积,因为在只有三个元素的情况下,无需排序,直接返回乘积即可。

  3. 如果列表长度不等于 3,那么这一行代码对列表 nums 进行排序。排序后,nums 中的元素将按升序排列,也就是从小到大排列。

  4. 在计算部分,先计算了两个可能的最大乘积,然后返回其中较大的那个。

    • 计算的是排序后的列表中,最小的两个数与最大的一个数的乘积。
    • 计算的是排序后的列表中,最大的三个数的乘积。

    这两个乘积中的较大者就是整个列表中三个数的最大乘积。

基于上述思考,代码如下:

class Solution:
    def maximumProduct(self, nums: List[int]) -> int:
        nlen = len(nums)    
        if nlen == 3:
            return nums[0] * nums[1] * nums[2]
        nums.sort()
        return max(nums[0]*nums[1]*nums[-1],nums[-1]*nums[-2]*nums[-3])

执行结果如下图:

image-20230922180102190.png

思路2:

  1. 一开始先对输入列表 nums 进行排序。排序后,nums 中的元素将按升序排列,也就是从小到大排列。
  2. 然后计算了排序后列表中最大的三个数的乘积。由于列表已经排序,最大的三个数将位于列表的末尾,因此通过索引 -1-2-3 可以访问到它们。这三个数相乘的结果被赋值给变量 res1
  3. then,计算了排序后列表中最小的两个数与最大的一个数的乘积。nums[0]nums[1] 分别是列表中的最小的两个数,而 nums[-1] 是最大的一个数。这三个数相乘的结果被赋值给变量 res2
  4. 最后一行比较了变量 res1res2 的值,然后返回其中较大的那个值。这就是函数的返回值,它表示输入列表中的三个数的最大乘积。

基于上述思考,代码如下:

class Solution:
    def maximumProduct(self, nums: List[int]) -> int:
        nums.sort()
        # 全正数 或者 全负数
        res1 = nums[-1]*nums[-2]*nums[-3]
        # 有正数有负数
        res2 = nums[0]*nums[1]*nums[-1]
        return max(res1, res2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值