美文网首页
算法原型——子数组最大和(Array DP)

算法原型——子数组最大和(Array DP)

作者: futurehau | 来源:发表于2016-08-06 12:57 被阅读186次

题目描述

求一个数组的子数组最大和
例如[3,-2,1,6,-9,1,2,3]
那么这个数组的子数组最大和为8[3,-2,1,6]
[leetcode53]https://leetcode.com/problems/maximum-subarray/

思路:

  1. 首先当然可以暴力的使用两层循环找到这个最大的子数组,但是太费时间了。
  2. 动态规划来求解

算法流程

  1. 使用两个变量cur和res,cur代表求解过程中的一个临时变量,代表累加到当前位置的一个片段最大,res代表全局的最大,实时更新。
  2. 遍历数组,cur为数组元素的累加和,如果cur<0,先把cur置为0,然后cur加上当前位置元素,并比较cur和res的大小,更新res。遍历结束后返回res即可。

算法原理

思考位置i,如果在位置i cur大于0,证明你从i位置开始的最大和肯定没有从i之前开始的大,假如你cur<0了,那么从i 开始肯定比从i之前开始大,因为你前缀为负数,为何不直接丢弃前缀呢。所以有了我们算法的更新策略。

代码

public class Solution {
    public int maxSubArray(int[] nums) {
        if(nums==null||nums.length==0)
            return 0;
        int cur=nums[0];
        int res=nums[0];
        for(int i=1;i<nums.length;i++){
            cur=cur<0?0:cur;
            cur+=nums[i];
            res=Math.max(cur,res);
        }
        return res;
    }
}

相关文章

  • 算法原型——子数组最大和(Array DP)

    题目描述 求一个数组的子数组最大和例如[3,-2,1,6,-9,1,2,3]那么这个数组的子数组最大和为8[3,-...

  • 剑指offer 42-连续k个子数组的最大和

    核心方案: 动态规划, 一维, dp[i]表示以第i个元素结尾的子数组的最大和 思路: dp[i] 和 dp[i-...

  • 动态规划

    1子序列的最大和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最...

  • JavaScript数组的原型方法

    上章节讲完JS数组的私有方法,这个章节我们继续讲解数组的原型方法。 Array的原型属性 一、Array.conc...

  • 数组的扩展

    Aaary类是一个函数,返回数组 Array.of() Array.form(数组/类数组),返回一个数组 在原型...

  • Kadane's Algorithm

    关于该种算法的两个例子: 例一:给定一个数组array,返回子数组的最大累加和。举例:array=【1,-2,3,...

  • JavaScript 数组 函数

    1、标准库函数: 2、Array数组: 1、创建数组方法: 2、数组本质: 原型链上必须有Array.protot...

  • LeetCode #1043 Partition Array f

    1043 Partition Array for Maximum Sum 分隔数组以得到最大和 Descripti...

  • 原型和原型链

    原型和原型链 题目 1.如何准确判断一个变量是不是数组? 答:用 a(变量)instanceof Array(数组...

  • 2022-02-26最大子数组的和

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

网友评论

      本文标题:算法原型——子数组最大和(Array DP)

      本文链接:https://www.haomeiwen.com/subject/aauksttx.html