前端算法-乘积最大子数组

简介: 前端算法-乘积最大子数组

题目

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

输入: nums = [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

思路

我们先声明变量length,默认值为nums数组的长度,然后再声明maxF变量和minF变量以及multiply变量,maxF变量的值和minF变量的值以及multiply变量的值默认都为nums数组的第一个值,不同的是maxF变量存储着最大子数组,minF变量存储着最小子数组,multiply变量存储最大连续子数组的乘积,我们在使用for循环进行遍历,我们从nums数组的第二个值开始,在循环中我们新建max变量和min变量,max变量的值和min变量的值分别是maxF变量和minF变量,这两个变量是将最大子数组和最小子数组复制过来,然后使用Math.max方法获取到最大连续子数组值,这里可能没有之前的数组值,但是一定要包含当前循环的数组值,将获取到的最大连续子数组值赋值给maxF变量,在使用Math.min方法获取到最小连续子数组值,因为有可能会出现负值的情况,不过负负得正,最小值也会成为最大值,我们将获取到的值赋值给minF变量,然后再使用Math.max方法在multiply变量和maxF变量取出最大值赋值给multiply变量,更新下最大连续子数组的乘积,循环结束后,我们将存储最大连续子数组的乘积multiply变量返回出去

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxProduct = function(nums) {
    let length = nums.length;
    let maxF = nums[0]; 
    let minF = nums[0];
    let multiply = nums[0];
    for(let i=1; i<length; i++){ 
        let max = maxF; 
        let min = minF;
        maxF = Math.max(max * nums[i], Math.max(nums[i], min * nums[i])); 
        minF = Math.min(min * nums[i], Math.min(nums[i], max * nums[i])); 
        multiply = Math.max(multiply, maxF); 
    }
    return multiply; 
};


相关文章
|
1月前
|
算法 前端开发 数据可视化
数据结构与算法在前端开发中的实际应用
本文将探讨数据结构与算法在前端开发中的实际应用,重点介绍在处理大规模数据、优化性能和提升用户体验方面的具体场景和解决方案。
|
1月前
|
算法 索引 Python
Python3实现旋转数组的3种算法
Python3实现旋转数组的3种算法
21 0
|
14天前
|
算法 前端开发
前端算法 岛屿的最大面积 DFS(深度优先搜索)
前端算法 岛屿的最大面积 DFS(深度优先搜索)
11 0
|
18天前
|
算法
算法系列--两个数组的dp问题(2)(下)
算法系列--两个数组的dp问题(2)(下)
19 0
|
18天前
|
存储 算法
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)(下)
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)
18 0
|
18天前
|
算法
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)(上)
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)
22 0
|
18天前
|
算法 计算机视觉
算法系列--两个数组的dp问题(1)(下)
算法系列--两个数组的dp问题(1)
19 0
|
18天前
|
算法
算法系列--两个数组的dp问题(1)(上)
算法系列--两个数组的dp问题(1)
14 0
|
1月前
|
存储 算法 搜索推荐
在C++语言中数组算法
在C++语言中数组算法
14 0
|
1月前
|
人工智能 算法
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)