题解 | #连续子数组的最大和(二)#
连续子数组的最大和(二)
https://www.nowcoder.com/practice/11662ff51a714bbd8de809a89c481e21
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型一维数组
* @return int整型一维数组
*/
public int[] FindGreatestSumOfSubArray (int[] array) {
// write code here
int n = array.length;
//记录到下标i为止的最大连续子数组和
int[] dp = new int[n];
dp[0] = array[0];
int maxsum = array[0];
//滑动区间
int left = 0, right = 0;
//记录最长的区间
int resl = 0, resr = 0;
for(int i = 1; i < n; i ++){
//原始右区间端点为0,因此+1与当前区间值保持一致
right ++;
dp[i] = Math.max(dp[i - 1] + array[i], array[i]);
//如果当前元素的值比之前的区间和还大,则更新区间
if(dp[i - 1] + array[i] < array[i]){
left = right;
}
//如果当前和比之前的和更大或者和相同的情况下区间更长,则更新
if(dp[i] > maxsum || dp[i] == maxsum && (right - left + 1) > (resr - resl + 1)){
maxsum = dp[i];
resl = left;
resr = right;
}
}
int[] res = new int[resr - resl + 1];
for(int i = resl; i <= resr; i ++){
res[i - resl] = array[i];
}
return res;
}
}
#剑指offer##java##算法笔试#剑指Offer2-Java题解 文章被收录于专栏
剑指offer题解(java版)
