题目:

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:

输入:nums = [1]
输出:1
示例 3:

输入:nums = [5,4,-1,7,8]
输出:23

题解1:(贪心)

解题思路:

贪心就是从局部最优解中,推出全局最优解。

局部最优:如果当前位置前面的最大子数组和sum小于0,说明前面的最大子数组和对当前位置是副作用,直接将当前位置的值作为本身位置的最大子数组和。

全局最优:记录每一个位置的最大子数组和,并取最大的子数组和。ans是用于记录每个位置上的最大子数组和,取其中的最大值,起始值为数组的第一个元素。

 代码:

var maxSubArray = function(nums) {//sum用于记录当前位置的最大子数组和,如果当前位置前面的最大数组和sum小于0,说明前面的最大子数组和对当前位置是副作用,直接将当前位置作为本身位置的最大子数组和// ans是用于记录每个位置上的最大子数组和,取其中的最大值,起始值为数组的第一个元素let sum = 0 , ans = nums[0]for(let i = 0 ; i < nums.length ; i++) {if(sum > 0) {sum += nums[i]}else {sum = nums[i]}ans = Math.max(ans,sum)}return ans
};

题解2:(动态规划)

var maxSubArray = function(nums) {// dp[i]表示nums中以nums[i]结尾的最大子数组和let dp = []dp[0] = nums[0]//rusult用于记录当前位置上的最大和 也就是当前位置上以及前面的数组元素中的最大和 初始值为dp[0] let result = dp[0]// 从i=1位置开始遍历 因为dp[0]已经确定了 for(let i = 1 ; i < nums.length ; i++) {// dp[i]要么是当前数字 要么是当前数字与前面数字最大子数组和的和dp[i] = Math.max(dp[i-1]+nums[i],nums[i])// 如果当前的dp[i]大于前面的dp[i] 则更新最大子数组和的值result result = Math.max(dp[i],result)}return result
};

最大子数组和js解法相关推荐

  1. 最大子数组和Python解法

    给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 子数组 是数组中的一个连续部分. 例: 输入:nums = [-2,1,-3,4,-1,2, ...

  2. 华为OD机试 - 几何平均值最大子数组(Java JS Python)

    题目描述 从一个长度为N的正数数组numbers中找出长度至少为L且几何平均值最大子数组,并输出其位置和大小.(K个数的几何平均值为K个数的乘积的K次方根) 若有多个子数组的几何平均值均为最大值,则输 ...

  3. [LeetCode] Maximum Subarray 最大子数组

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

  4. 编程之美2.15 二维数组最大子数组的和(数组下标从(1,1)开始)

          首先,我们看到这篇文章的题目,我们就会想到之前的那个题目 -- 连续子数组最大和问题.这个问题无疑就是把原问题扩展到二维的情况.       想起来这个问题也不是很难,我们可以求解一维矩阵 ...

  5. 动态规划套路:最大子数组和

    动态规划套路:最大子数组和 文章目录 动态规划套路:最大子数组和 一.题目描述 二.分析 一.题目描述 这次看一个简答的题: 二.分析 这道题比较简单,主要是回顾动态 规划的解法! 其实第一次看到这道 ...

  6. 最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和...

    最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和 文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathi ...

  7. 真香!8 行代码搞定最大子数组和问题

    作者 | 码农的荒岛求生 来源 | 码农的荒岛求生 今天给大家带来一道极其经典的题目,叫做最大和子数组,给定一个数组,找到其中的一个连续子数组,其和最大. 示例: 输入: nums = [-2,1,- ...

  8. 最大子数组累加和(2种方法)

    题目:最大子数组累加和 给定一个数组arr=[1,-2,3,5,-2,6,-1];所有的子数组中[3,5,-2,6]可以累加出最大的和12,所以返回12 什么是子数组,子数组就是在原数组中连续的一段数 ...

  9. 首尾相连数组的最大子数组和

    前言 这是昨晚参加九度oj的7月份月赛碰到的题目,很有意思,今早查了一下,原来<编程之美>中已经讲过类似题目,看来我把<剑指offer>看完之后,下一本书就是<编程之美& ...

最新文章

  1. Verilog中case,casex,casez的区别
  2. 雷蛇鼠标宏文件_Razer推出DeathAdder V2与Basilisk V2游戏鼠标
  3. Windows Phone开发(13):如何规范用户的输入行为 转:http://blog.csdn.net/tcjiaan/article/details/7341513...
  4. Halcon - 定位 - 卡尺
  5. Servlet 和Filter的生命周期
  6. 【bzoj2761】【JLOI2011】【不反复数字】【平衡树】
  7. 50-20-200-配置-checkpoint配置
  8. 优秀的模糊测试代码是如何炼成的?
  9. matlab gpu 编程 macOS,MATLAB GPU编程基础
  10. .NET开发中的Exception处理三定律[转]
  11. 185+日系清新预设调色PS/PR/FCPX/达芬奇/AE/通用LUT文艺森系滤镜(含安装教程)
  12. 安川机器人仿真软件安装
  13. 删除卸载不干净的任务 vmware卸载不干净->服务清理 / 注册表清理
  14. UnicodeDecodeError: 'gbk' codec can't decode byte 0xfe in position 45: illegal multibyte sequence
  15. Android JOSON应用及详解
  16. Jboss部署Springboot项目
  17. 学习C++:C++进阶(三)CMake基础篇---用一个小型项目了解CMake及环境构建
  18. 多余文字隐藏用省略号代替
  19. C语言005:常见例题
  20. 3dsMax重新加载原来的材质和贴图的路径

热门文章

  1. Splash界面使用动画
  2. eclipse gcc开源_前5名:Eclipse Che,Capital One的开源等等
  3. HTML网页规划与设计【冬季奥林匹克运动会——带报告5200字】HTML+CSS+JavaScript
  4. 案例:用java做简单的自我介绍
  5. 国内研究团队提出通过非侵入性脑机超表面平台实现人脑直接无线通信
  6. 英文书 or 中文书?
  7. 我裁了那个在年会上被奖励的员工。关于裁员的7个故事,很无奈很不甘
  8. 关于android中的too many open files(error 24)
  9. 【4月英语——处于波动期】
  10. mt6735 [Audio Speech]如何在通话中播放音乐/通话背景音