public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型vector 
     * @return int整型vector
     */
    vector<int> FindGreatestSumOfSubArray(vector<int>& array) {
        // write code here
       //简单好理解
        int inf=-0x3f3f3f3f,maxn=-0x3f3f3f3f;//无穷小
        int sum=0,newletf=0,newright=0,letf=0,right=0;
        vector<int>ret;
        for(int i=0;i<array.size();i++){//这里可以用动态规划找出最大值
            sum=max(sum+array[i],array[i]);
            inf=max(inf,sum);//记录最大值
        }
        sum=0;
        //用newletf和newright两个指针枚举最大长度(已知最大值)
        for(int i=0;i<array.size();i++){
            if(sum+array[i]>=array[i]){
                sum=sum+array[i];
            }
            else{
                sum=array[i];
                newletf=newright;
            }
            //找出最大值的最大长度,找到就更新长度letf和right
            if(sum==inf&&newright-newletf>=right-letf){
                    letf=newletf;
                    right=newright;
                    
                }
                    newright++;//指针后移,继续往后找
        }
//        cout<<letf<<" "<<right<<" ";
        for(int i=letf;i<=right;i++){//根据最大长度赋值ret
            ret.push_back(array[i]);
        }
        return ret;
    }
};