【Leetcode_总结】 628. 三个数的最大乘积
Q:
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
输入: [1,2,3] 输出: 6
示例 2:
输入: [1,2,3,4] 输出: 24
注意:
- 给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
- 输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。
思路:找到数组中的三个最大正整数,或者一个最大正整数和两个最小负整数,首先对数组排序,如果 list[0] >0 也就是数组为全正整数,则取后三输出,如果首位<0 则判断是否有两个以上小于0的数字,如果没有,则取后三个输出乘积,如果有,则比较list[0]*list[1] 和 list[-2]*list[-3] 的大小,与最大相乘后输出,代码如下:
class Solution(object):
def maximumProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums) == 3:
return nums[0]*nums[1]*nums[2]
nums.sort()
if nums[0] > 0:
return nums[-1]*nums[-2]*nums[-3]
else:
if nums[0] < 0 and nums[1] < 0:
return nums[-1]*max((nums[-2]*nums[-3]),nums[0]*nums[1])
else:
return nums[-1]*nums[-2]*nums[-3]
AC记录:
看一下别人的思路:
class Solution(object):
def maximumProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
max1 = max2 = max3 = -1000
min1 = min2 = 1000
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)
其他排名靠前的代码也都大同小异。