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]) 

 

posted @ 2022-09-29 09:42  努力中的小菜鸟  阅读(72)  评论(0)    收藏  举报