题目:
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
思路如下:
- 先对数组进行排序
- 如果全为负数或全为正数,取最后三个数相乘既为最大乘积。关键是既有正数又有负数的情况(0其实可以看作负数)。如果有两个正数(例如
[-2,-1,0,1,2])
,那么最大值为arr[0] * arr[1] * arr[-1]
, 如果有一个正数(例如[-2,-1,0,2]
),最大值同样为arr[0] * arr[1] * arr[-1]
。 - 结合上面两种情况,只需要取
max(arr[-1] * arr[-2] * arr[-3], arr[0] * arr[1] * arr[-1]
)
1 2 |
|