628 三个数的最大乘积
有以下几种情况:
1、全是正数
2、全是负数
3、有正有负,则最大乘积既可能是三个最大正数的乘积,也可能是两个最小负数(即绝对值最大)与最大正数的乘积。
这个时候找出数列中最大的三个数和最小的两个数,最后在三个最大的数乘积和第一个最大的数和最小的两个数乘积中进行比较,选择最大的那个。
初始将最大的三个值设为负无穷,那么所有的数都比初始最大值大,然后比较之后得到最大的三个数;同样的最小的两个值设为正无穷,所有的数都比初始最小值小,然后比较之后得到最小的两个值。
1 max1 = -float('inf') # 第一大的值 2 max2 = -float('inf') # 第二大的值 3 max3 = -float('inf') # 第三大的值 4 min1 = float('inf') # 第一小的值 5 min2 = float('inf') # 第二小的值 6 7 for num in nums: 8 if num > max1: 9 max3 = max2 10 max2 = max1 11 max1 = num 12 elif num > max2: 13 max3 = max2 14 max2 = num 15 elif num > max3: 16 max3 = num 17 # print("num=",num) 18 # print(max1,max2,max3,min1,min2) 19 if num < min1: 20 min2 = min1 21 min1 = num 22 elif num < min2: 23 min2 = num 24 # print("num=",num) 25 # print(max1,max2,max3,min1,min2) 26 return max(max1 * max2 * max3, max1 * min1 * min2)
还有一种使用排序的方法:
nums.sort() return max(nums[-1]*nums[-2]*nums[-3],nums[-1]*nums[0]*nums[1])

浙公网安备 33010602011771号