📅  最后修改于: 2023-12-03 15:40:14.184000             🧑  作者: Mango
该程序计算给定整数数组中最大乘积的连续子数组。比如,数组 [2,3,-2,4] 的最大乘积为 6(由 [2,3] 组成)。
该程序使用动态规划的思想来解决问题。具体来说,
function maxProduct(nums) {
// 初始化
let max = nums[0];
let max_dp = [nums[0]];
let min_dp = [nums[0]];
// 动态规划数组计算
for (let i = 1; i < nums.length; i++) {
if (nums[i] > 0) {
max_dp[i] = Math.max(nums[i], nums[i] * max_dp[i - 1]);
min_dp[i] = Math.min(nums[i], nums[i] * min_dp[i - 1]);
} else {
max_dp[i] = Math.max(nums[i], nums[i] * min_dp[i - 1]);
min_dp[i] = Math.min(nums[i], nums[i] * max_dp[i - 1]);
}
max = Math.max(max, max_dp[i]);
}
return max;
}
console.log(maxProduct([2,3,-2,4])); // 输出 6
console.log(maxProduct([-2,0,-1])); // 输出 0
该程序算法复杂度为 O(n),其中 n 是 nums 数组的长度。程序使用了动态规划的思想,将问题划分为子问题并从子问题中构造解。时间效率较高。