博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode][JavaScript]Maximum Subarray
阅读量:4339 次
发布时间:2019-06-07

本文共 1487 字,大约阅读时间需要 4 分钟。

Maximum Subarray

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [−2,1,−3,4,−1,2,1,−5,4],

the contiguous subarray [4,−1,2,1] has the largest sum = 6.

 

 


 

 

找出和最大的子串。

动态规划 ,维护一个变量previous,记录之前的最大值。

当前的最大值就是Math.max(previous + nums[i], nums[i])。

 

1 /** 2  * @param {number[]} nums 3  * @return {number} 4  */ 5 var maxSubArray = function(nums) { 6     if(nums.length === 0) return 0; 7     var previous = Math.max(0, nums[0]), max = nums[0]; 8     for(var i = 1; i < nums.length; i++){ 9         previous = Math.max(previous + nums[i], nums[i]);10         max = Math.max(previous, max);11     }12     return max;13 };

 

 

一开始写的比较啰嗦。

动态规划,到当前index的子串的最大值可能有三种情况:

1. 当前元素的,nums[i]

2. nums[i] + 包括了上一个元素nums[i - 1]的最大子串的和

3. nums[i] + 上一个元素nums[i - 1]之前的最大值(不包括nums[i - 1]) + nums[i - 1]

 

1 /** 2  * @param {number[]} nums 3  * @return {number} 4  */ 5 var maxSubArray = function(nums) { 6     if(nums.length === 0) return 0; 7     var dp = [], max = nums[0], previous, current; 8     dp[0] = {previous : 0, current: nums[0]}; 9     for(var i = 1; i < nums.length; i++){10         previous = dp[i - 1].current;11         current = Math.max(nums[i], nums[i] + dp[i - 1].current,12             nums[i] + nums[i - 1] + dp[i - 1].previous);13         dp[i] = {previous : previous, current: current};14         max = Math.max(current, max);15     }16     return max;17 };

 

 

转载于:https://www.cnblogs.com/Liok3187/p/5327134.html

你可能感兴趣的文章
阶段3 3.SpringMVC·_07.SSM整合案例_02.ssm整合之搭建环境
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_3、快速创建SpringBoot应用之手工创建web应用...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_04.ssm整合之编写SpringMVC框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_5、SpringBoot2.x的依赖默认Maven版本...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_08.ssm整合之Spring整合MyBatis框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_9、SpringBoot基础HTTP其他提交方法请求实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_12、SpringBoot2.x文件上传实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_19、SpringBoot个性化启动banner设置debug日志...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_23、SpringBoot2.x启动原理概述...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_21、SpringBoot2.x配置全局异常返回自定义页面...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_34、SpringBoot整合Mybatis实操和打印SQL语句...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_41、SpringBoot定时任务schedule讲解...
查看>>