题解 | #连续子数组的最大和(二)#
连续子数组的最大和(二)
https://www.nowcoder.com/practice/11662ff51a714bbd8de809a89c481e21
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型vector * @return int整型vector */ vector<int> FindGreatestSumOfSubArray(vector<int>& array) { if (array.empty()) { return vector<int>(); } vector<int> vt_sum(array.size(),0); vector<int> vt_begin(array.size(),0); //子数组下标开头 vector<int> vt_end(array.size(),0); //子数组下标结尾 vt_sum[0] = array[0]; vt_begin[0] = 0; vt_end[0] = 0; for(int i = 1;i<array.size();i++) { if (vt_sum[i-1] + array[i] >= array[i]) { vt_sum[i] = vt_sum[i-1] + array[i]; vt_begin[i] = vt_begin[i-1]; vt_end[i] = i; }else { vt_sum[i] = array[i]; vt_begin[i] = i; vt_end[i] = i; } } int sum_max = vt_sum[0]; int max_index = 0; for (int i = 1; i < vt_sum.size(); i++) { if (vt_sum[i] >= sum_max) { sum_max = vt_sum[i]; max_index = i; } } vector<int> vt_res(array.begin() + vt_begin[max_index],array.begin() + vt_end[max_index] + 1); return vt_res; } };