leetCode 152

153 阅读1分钟
  1. 最大连续乘积数组

在一个数组中寻找连续乘积最大的子数组,最少包括一个元素

例子 1:

输入: [2,3,-2,4] 输出: 6 解释: [2,3] 最大是 6.

例子 2:

输入: [-2,0,-1] 输出: 0 解释: 结果不能是 2, 因为 [-2, -1] 不连续.

题解 1 dp[i] 表示数组 i 位置的最大连续乘积最大的数组,dp[i+1] 要么等于 dp[i],要么等于 nums[i]为结尾的连续乘积最大的数组

题目比较简单,时间复杂度 O(n^2),空间复杂度 O(n)

/**
 * @param {number[]} nums
 * @return {number}
 */
export default (nums) => {
  let dp = [];
  dp[0] = nums[0];
  for (let i = 1; i < nums.length; i++) {
    let maxNum = 1;
    dp[i] = nums[i];
    for (let j = i; j >= 0; j--) {
      maxNum = maxNum * nums[j];
      if (maxNum > dp[i - 1] || (dp[i] && maxNum > dp[i])) {
        dp[i] = maxNum;
      }
      // if (maxNum < dp[i - 1] && maxNum !== 1 && maxNum !== nums[j]) {
      //   break;
      // }
    }
    dp[i] = Math.max(dp[i], dp[i - 1]);
  }
  return dp[nums.length - 1];
};