三个数的最大乘积
问题简述
给定一个长度为 nn 的无序数组 AA ,包含正数、负数和 0 ,请从中找出 3 个数,使得乘积最大,返回这个乘积。
要求时间复杂度: O(n) ,空间复杂度: O(1) 。
思路1:排序
设倒序排序后的数组为
A
;最大乘积只有两种可能:
max(A[0]*A[1]*A[2], A[-1]*A[-2]*A[0])
;
思路2:堆
确定了最大乘积的可能;
我们实际上要找到 5 个数:最大的 3 个数和 最小的 2 个数;可以利用堆结构;
时间复杂度
O(N)
;
Last updated