题目
我的解答
首先想到能不能用动态规划的方法来做,发现不会做。后来想到先排序,再处理。举了几个例子,发现乘积最大的三个数只会出现在数组收尾各三个元素中,那么用max()找出来即可。
def func():
nums = [2,1,3,4,5,1,-2,-6,-5]
n = len(nums)
nums.sort()
a = nums[0]*nums[1]*nums[2]
b = nums[-1]*nums[-2]*nums[-3]
c = nums[0]*nums[1]*nums[-1]
d = nums[-1]*nums[-2]*nums[0]
return max(a,b,c,d)
func()
比较好的答案
我的答案其实还不错,时间超过96%,但看了题解,其实不需要计算四个数字,只需计算两个即可,因为这两种情况已经包含了另外两种:
b = nums[-1]*nums[-2]*nums[-3]
c = nums[0]*nums[1]*nums[-1]