最大子列和:
当前的cur<0,表明其对于后面的和增大,故将cur置为0;
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
int cur=0;
int ans = INT_MIN;
for (int i=0;i<array.size();i++)
{
cur += array[i];
if (cur>ans)ans = cur;
if (cur<0)cur=0;
}
return ans;
}
};
扩展到二维:
参考:
https://blog.csdn.net/Double2hao/article/details/51727420
第一个for循环,表示子矩阵的开头行;
第二个for循环,开始计算b
注意b[k]是在累加着的
第三个for循环,即可看作 最大子列和。
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
using namespace std;
#define INT_MIN 0x80000000
int a[105][105];
int b[105];
int main()
{
int n;
cin>>n;
int ans = INT_MIN;
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)cin>>a[i][j];
}
for (int i=0;i<n;i++)
{
memset(b,0,sizeof(b));
for (int j=i;j<n;j++)
{
int cur =0;
for (int k=0;k<n;k++)
{
b[k] += a[j][k];
cur += b[k];
if (cur>ans)ans = cur;
if (cur<0)cur =0;
}
}
}
cout<<ans;
return 0;
}