首页 > 编程语言 > 详细

每日leetcode-数组-628. 三个数的最大乘积

时间:2021-05-02 16:50:48      阅读:30      评论:0      收藏:0      [点我收藏+]

类型:数组-数组的遍历

题目描述:

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

解题思路:

首先将数组排序。

如果数组中全是非负数,则排序后最大的三个数相乘即为最大乘积;如果全是非正数,则最大的三个数相乘同样也为最大乘积。

如果数组中有正数有负数,则最大乘积既可能是三个最大正数的乘积,也可能是两个最小负数(即绝对值最大)与最大正数的乘积。

综上,我们在给数组排序后,分别求出三个最大正数的乘积,以及两个最小负数与最大正数的乘积,二者之间的最大值即为所求答案。

(标红部分是自己做题时没有想到的地方,只考虑了用例种全正或者全负的情况)

1 class Solution:
2     def maximumProduct(self, nums: List[int]) -> int:
3         nums.sort()
4         return max(nums[-1]*nums[-2]*nums[-3],nums[0]*nums[1]*nums[-1]) #要考虑有正有负的情况

时间复杂度:O(N\log N)O(NlogN),其中 NN 为数组长度。排序需要 O(N\log N)O(NlogN) 的时间。

空间复杂度:O(\log N)O(logN),主要为排序的空间开销。

 

每日leetcode-数组-628. 三个数的最大乘积

原文:https://www.cnblogs.com/LLLLgR/p/14725793.html

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