您的位置:首页 > Web前端 > JavaScript

leetcode(js)-每日一练之 乘积最大子数组 题库编号152

2020-06-04 06:44 501 查看

leetcode(js)-每日一练之 乘积最大子数组


这道题部分思路跟
最大子序和
这道题类似,刚开始做的时候,我觉得先把最大子序和的加号变成乘号试试

var maxProduct = function(nums) {
let memo = [];
memo[0] = nums[0];
let max = nums[0];
for (let i = 1; i < nums.length; i++) {
memo[i] = Math.max(nums[i] * memo[i - 1], nums[i]);
max = Math.max(max, memo[i]);;
}
return max
};

会发现不对,想了想是因为,负数成负数会变成超大的一个数,所以决定再用一个数组存最小的数

var maxProduct = function(nums) {
const maxProductmemo = [];
const minProductmemo = [];
maxProductmemo[0] = nums[0];
minProductmemo[0] = nums[0];
let max = nums[0];
for (let i = 1; i < nums.length; i++) {
maxProductmemo[i] = Math.max(nums[i], nums[i] * maxProductmemo[i - 1], nums[i] * minProductmemo[i - 1]);
minProductmemo[i] = Math.min(nums[i], nums[i] * maxProductmemo[i - 1], nums[i] * minProductmemo[i - 1]);
max = Math.max(maxProductmemo[i], max);
}
return max;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: