📜  最大乘积子数组的 Javascript 程序

📅  最后修改于: 2022-05-13 01:57:49.154000             🧑  作者: Mango

最大乘积子数组的 Javascript 程序

给定一个包含正整数和负整数的数组,找到最大乘积子数组的乘积。预期时间复杂度为 O(n),只能使用 O(1) 额外空间。

例子:

Input: arr[] = {6, -3, -10, 0, 2}
Output:   180  // The subarray is {6, -3, -10}

Input: arr[] = {-1, -3, -10, 0, 60}
Output:   60  // The subarray is {60}

Input: arr[] = {-2, -40, 0, -2, -3}
Output:   80  // The subarray is {-2, -40}

天真的解决方案:

这个想法是遍历每个连续的子数组,找到每个子数组的乘积并从这些结果中返回最大乘积。

下面是上述方法的实现。

Javascript


Javascript


输出:

Maximum Sub array product is 112

时间复杂度: O(N 2 )
辅助空间: O(1)

高效解决方案:

以下解决方案假定给定的输入数组始终具有正输出。该解决方案适用于上述所有情况。它不适用于 {0, 0, -20, 0}, {0, 0, 0}.. 等数组。可以轻松修改解决方案以处理这种情况。
它类似于最大和连续子数组问题。这里唯一需要注意的是,最大乘积也可以通过以前一个元素结尾的最小(负)乘积乘以这个元素来获得。例如,在数组{12, 2, -3, -5, -6, -2}中,当我们在元素-2处时,最大乘积是乘积,最小乘积以-6和-2结尾。

Javascript


输出
Maximum Sub array product is 112

时间复杂度: O(n)
辅助空间: O(1)

有关更多详细信息,请参阅有关最大乘积子阵列的完整文章!