题解 | #连续子数组的最大和(二)#
连续子数组的最大和(二)
https://www.nowcoder.com/practice/11662ff51a714bbd8de809a89c481e21
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型vector
* @return int整型vector
*/
vector<int> FindGreatestSumOfSubArray(vector<int>& array) {
// write code here
//1.确定dp数组含义
//从前往后,遍历到当前位置i最大和是dp[i];
int dp = 0;
vector<int> res;//最大连续累加和子数组
vector<int> tmp;//当前遍历的连续累加和子数组
int max = -100;//最大连续和
//初始化
dp = array[0];
//将元素加入当前累加和子数组中
tmp.push_back(array[0]);
//递推公式
for (int i = 1; i < array.size(); i++) {
//递推公式
if (dp >= 0) {
dp = dp + array[i];
tmp.push_back(array[i]);
} else {
dp = array[i];
tmp.clear();
tmp.push_back(array[i]);
}
//维护当前最大连续和子数组
if (max <= dp) {
max = dp;
res = tmp;
}
}
//为了防止当数组的长度等于1,导致漏了情况。
if (dp > max) {
res = tmp;
}
return res;
}
};