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

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

题目

给你一个整数数组 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; 
};


目录
打赏
0
0
0
0
1
分享
相关文章
关于员工上网监控系统中 PHP 关联数组算法的学术解析
在当代企业管理中,员工上网监控系统是维护信息安全和提升工作效率的关键工具。PHP 中的关联数组凭借其灵活的键值对存储方式,在记录员工网络活动、管理访问规则及分析上网行为等方面发挥重要作用。通过关联数组,系统能高效记录每位员工的上网历史,设定网站访问权限,并统计不同类型的网站访问频率,帮助企业洞察员工上网模式,发现潜在问题并采取相应管理措施,从而保障信息安全和提高工作效率。
39 7
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
116 23
|
6月前
|
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
71 0
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
382 4
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
104 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。
185 2
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
147 5
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
70 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
@RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)
文章详细讲解了在SpringMVC中如何使用`@RequestMapping`进行路由映射,并介绍了前后端参数传递的多种方式,包括传递单个参数、多个参数、对象、数组、集合以及JSON数据,并且涵盖了参数重命名和从URL中获取参数的方法。
570 0
@RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)
一文了解分而治之和动态规则算法在前端中的应用
该文章详细介绍了分而治之策略和动态规划算法在前端开发中的应用,并通过具体的例子和LeetCode题目解析来说明这两种算法的特点及使用场景。
一文了解分而治之和动态规则算法在前端中的应用
下一篇
oss创建bucket
目录