双指针+额外O(1)的空间复杂度求解:使用两组数据求解,一组存最优解,一组存当前解。然后更新即可。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型一维数组
* @return int整型一维数组
*/
public int[] FindGreatestSumOfSubArray (int[] array) {
// write code here
int left_r = 0, len_r = 0, max = Integer.MIN_VALUE;
int left = 0, len = 0, sum = -1;
for(int i = 0;i < array.length;i++) {
if(sum < 0) {
sum = array[i];
left = i;
len = 1;
if(max < sum) {
max = sum;
left_r = left;
len_r = len;
}
} else {
sum += array[i];
len++;
if(max < sum) {
max = sum;
left_r = left;
len_r = len;
} else if(max == sum) {
if(len > len_r) {
left_r = left;
len_r = len;
}
}
}
}
int[] res = new int[len_r];
for(int i = 0;i < len_r;i++) {
res[i] = array[i+left_r];
}
return res;
}
}