编程之美-2.14 求数组的子数组之和的最大值

来源:互联网 发布:郫都区人民政府 知乎 编辑:程序博客网 时间:2024/05/19 00:15

如题,给一个数组A,求这个数组的子数组之和的最大值。注意:这里的子数组为连续的,只需要求和,不需要返回子数组的具体位置。

根据书上的解法3,用startNum表示连续子数组的开始值,用maxSum表示子数组之和的最大值,二者均初始化为A[0],然后通过遍历数组A,不断更新startNum和maxSum,最终返回maxSum。

代码如下:

#include <vector>#include <iostream>using namespace std;int max(int a, int b){return a > b ? a : b;}int MaxSum(vector<int>v){if (v.empty())return -1;int len = v.size();if (len == 1)return v[0];int startNum = v[0];int maxSum = v[0];for (int i = 1; i < len; i++){startNum = max(v[i], startNum + v[i]);maxSum = max(maxSum, startNum);}return maxSum;}int main(void){vector<int>v1 = { 1, -2, 3, 5, -3, 2 };vector<int>v2 = { 0, -2, 3, 5, -1, 2 };vector<int>v3 = { -9, -2, -3, -5, -3};int r1 = MaxSum(v1);int r2 = MaxSum(v2);int r3 = MaxSum(v3);return 0;}


0 0
原创粉丝点击