题解 | #连续子数组的最大和#
连续子数组的最大和
https://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484
#include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型vector * @return int整型 */ int FindGreatestSumOfSubArray(vector<int>& array) { // write code here // // 暴力法,时间复杂度失败 // int val = 0; // for(int i = 0; i < array.size(); ++i) // { // int sum = 0; // if (i == 0) { // val = array[i]; // 初始化 // } // for(int j = i; j < array.size(); ++j) // { // sum += array[j]; // 暴力更新当前节点的子数组 // val = max(val, sum); // 更新最大值 // } // } // return val; // 动态规划 vector<int> dp(array.size(), 0);// 开辟空间,否则dp[0]会非法访问报错 dp[0] = array[0]; int sum = 0; for(int i = 1; i < array.size(); ++i) { sum = dp[i-1] + array[i];// 记录当前的子数组的最大值 // if(sum < 0) sum = 0; dp[i] = max(sum, array[i]);// 状态更新并保存当前状态 // std::cout << i <<" " << dp[i] << std::endl; } sort(dp.begin(),dp.end());// 递增排序一下,目的把最大值移动到最后面 return dp[dp.size()-1];//返回最大值 } };
挤挤刷刷! 文章被收录于专栏
记录coding过程