连续子数组的最大和

来源:互联网 发布:淘宝首页全屏大图 编辑:程序博客网 时间:2024/05/10 10:09

题目

输入一个数组,数组里有正数也有负数。数组中一个或者连续的多个整数组成一个子数组,求出所有的子数组中和最大的值

解题

动态规划
定义:dp[i]表示以第i个数结尾的子数组的最大和
初始值:dp[0]=A[0]
这里写图片描述

public class Solution {    public int FindGreatestSumOfSubArray(int[] array) {        if(array == null || array.length == 0)            return 0;        int len = array.length;        int[] dp = new int[len];// dp[i] 表示以第i个数结尾的子数组的最大和        dp[0] = array[0];        int max = array[0];        for(int i=1;i<len;i++){            int subMax = dp[i-1] + array[i];             if(subMax > array[i]){                dp[i] = subMax;            }else{                dp[i] = array[i];            }            max = Math.max(max,dp[i]);        }        return max;    }}

去除定义的数组

public class Solution {    public int FindGreatestSumOfSubArray(int[] array) {        if(array == null || array.length == 0)            return 0;        int len = array.length;        int subMax = array[0];        int max = array[0];        for(int i=1;i<len;i++){            subMax = Math.max(subMax + array[i],array[i]);// 以 i元素结束的子数组的最大值            max = Math.max(max,subMax); // 全局最大值        }        return max;    }}

当然这个也可以直接暴力求解,三层循环

0 0