Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array [2,3,-2,4],the contiguous subarray [2,3] has the largest product = 6.
题目:返回数组中连续的最大值。
思路:用一维动态规划中的“局部最优和全局最优法”。利用乘法性质:累加结果只要是正的一定是递增,乘法中有可能现在看起来小的一个负数,后面跟另一个负数相乘就会得到最大的乘积。所以,只需要在维护一个局部最大的同时,在维护一个局部最小,这样如果下一个元素遇到负数时,就有可能与这个最小相乘得到当前最大的乘积和。
/**
* @param {number[]} nums
* @return {number}
*/
var maxProduct = function(nums) {
var i , j;
var len = nums.length;
var max = 0;
var min = 0;
var result = 0;
var temp_max = 0;
if(nums.length==0) return 0;
else if(nums.length==1) return Number(nums);
max = nums[0];
min = nums[0];
result = nums[0];
for(i=1;i<nums.length;i++)
{
temp_max = max;
max = Math.max(Math.max(nums[i]*max,nums[i]),nums[i]*min);
min = Math.min(Math.min(nums[i]*temp_max,nums[i]),nums[i]*min);
result = Math.max(result,max);
}
return result;
};
网友评论