import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型一维数组 
     * @return int整型一维数组
     */
    public int[] FindGreatestSumOfSubArray (int[] array) {
        // write code here
        
        int[] sum1 = new int[array.length];
        sum1[0] = array[0]; 
        
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();  // 记录和sum1[i]所对应的起始坐标low 
        int low = 0;                                                      // 开始时的起始坐标
        map.put(sum1[0], low);                                            
        int maxValue = array[0];                                          // 最大值
        for(int i = 1; i < array.length; i++){
            if(sum1[i - 1] >= 0){
                sum1[i] = sum1[i - 1] + array[i];                         // sum[i - 1] >= 0时,low不变
            }else {
                if(sum1[i - 1] + array[i] > array[i]){
                    sum1[i] = sum1[i - 1] + array[i];
                }else {
                    sum1[i] = array[i];
                    low = i;
                }
            }
            map.put(sum1[i],low);
            maxValue = maxValue > sum1[i] ? maxValue : sum1[i];
        }
        int high = sum1[0];                                             //取得最大值的终止坐标
        for(int ele = 0; ele < sum1.length; ele++){
            if(sum1[ele] == maxValue){
                high = ele;
            }
        }
        return Arrays.copyOfRange(array, map.get(maxValue), high + 1);
    }
}