版权声明:本文为博主原创,未经允许请不要转载哦 https://blog.csdn.net/weixin_43277507/article/details/88535238
给定一个整数数组,数组里有正有负。数组中的一个活连续多个元素组成一个子数组。求所有子数组的和的最大值。
一、枚举所有可能——最基础的解法
最直观的解法就是,计算出所有可能组合的子数组的和,返回最大的和。这种解法的复杂度最低也要
。
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public int FindGreatestSumOfSubArray(int[] array)
{
ArrayList<Integer> list = new ArrayList<Integer>();
int len = array.length;
for(int i = 0;i<len;i++) {
int sum = 0;
for(int j = i;j<len;j++)
{
sum += array[j];
list.add(sum);
}
}
return Collections.max(list);
}
}
二、动态规划法
假设
表示以第
个数字结尾的子数组的最大和,
即为我们所要求的最大和。那么,
public class Solution
{
public int FindGreatestSumOfSubArray(int[] array) {
int result = array[0];
int max=array[0];
for (int i = 1; i < array.length; i++) {
max=Math.max(max+array[i], array[i]);
result=Math.max(max, result);
}
return result;
}
}