动态规划求解
思路及代码如下:
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型一维数组
* @return int整型一维数组
*/
public int[] FindGreatestSumOfSubArray (int[] array) {
// write code here
//方法一 动态规划
int len = array.length;
int[] dp = new int[len];
dp[0] = array[0];
int max = array[0];
for(int i=1;i<len;++i){
dp[i] = Math.max(array[i]+dp[i-1],array[i]);
max = Math.max(dp[i],max);
}
int start=-1,end=len-1,j=len-1;
//从后往前走,找到第一个等于max的下标
for(;j>=0;--j){
if(dp[j]==max){
end = j;
break;
}
}
//从j-1下标开始继续 从后往前走,找到第一个比0小的数的下标,如果没有就默认是0
for(j = j-1;j>=0;--j){
if(dp[j]<0){
start = j;
break;
}
}
//最后拼接从[start+1,end]区间内的元素
int[] path = new int[end-start];
int index=0;
for(int i=start+1;i<=end;++i){
path[index++] = array[i];
}
return path;
}
}