import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型一维数组 
     * @return int整型一维数组
     */
    public int[] FindGreatestSumOfSubArray (int[] array) {
        int[] dp = new int[array.length];//当前位置子数组和的最大值
        int[] len = new int[array.length];//当前位置最大子数组的长度
        dp[0] = array[0];
        len[0] = 1;
        int max = array[0];
        for (int i = 1; i < array.length; i++) {
            dp[i] = Math.max(dp[i - 1] + array[i],array[i]);
            if(dp[i - 1] + array[i] == array[i]){
                len[i] = len[i - 1] + 1;
            }else {
                len[i] = dp[i] == array[i] ? 1 : len[i - 1] + 1;
            }
            max = Math.max(max,dp[i]);
        }
        int index = -1;
        Queue<int[]> queue = new PriorityQueue<>(1,(x,y) -> {
            return y[1] - x[1];
        });
        for (int i = 0; i < array.length; i++) {
            if(dp[i] == max){
                int[] ints = new int[2];
                ints[0] = i;
                ints[1] = len[i];
                queue.add(ints);
            }
        }
        index = queue.peek()[0];
        int[] res = new int[len[index]];
        int j = 0;
        for (int i = index - len[index] + 1; i <= index; i++) {
            res[j] = array[i];
            j++;
        }
        return res;
    }
}

一个dp数组存最大和,一个长度数组存最大数组长度,然后直接根据下标和长度从原数组里摘出来就行(可能有多个数组和都是最大,用优先队列排个序就行)