乘积最大子数组
给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
function maxProduct(nums) {
let maxsum = Math.max(...nums);
if(nums.length == 1){
return nums[0]
}
if(nums.length == 2 && nums.indexOf(0) > -1){
return nums[0] == 0 ? nums[1] : nums[0]
}
for(let i = 0;i < nums.length-1;i++){
let item = nums[i]
let sum = Math.max(...nums);
for(let j = i+1;j < nums.length;j++){
let jItem = nums[j]
item *= jItem
if(item > sum){
sum = item
}
}
if(sum > maxsum){
maxsum = sum
}
}
return maxsum
}
Leecode测试用例全部通过,提交未通过(显示时间超时,我也不知道什么原因)

动态规划
/**
* @param {number[]} nums
* @return {number}
*/
const maxProduct = (nums = [2, 3, -2, 4]) => {
let maxF = nums[0],
minF = nums[0],
ans = nums[0];
let length = nums.length;
for (let i = 1; i < length; ++i) {
let mx = maxF,
mn = minF;
maxF = Math.max(mx * nums[i], Math.max(nums[i], mn * nums[i]));
minF = Math.min(mn * nums[i], Math.min(nums[i], mx * nums[i]));
ans = Math.max(maxF, ans);
}
return ans;
};
以自己现在的努力程度,还没有资格和别人拼天赋

浙公网安备 33010602011771号