个人信息
github:buaazmac
使用教科书:代码大全
最大子数组和思路
利用贪心算法的思路解决。对于一段可能是最大子数组的子数组,它应该具有如下性质:从该子数组第一个元素到任一元素的和都必须大于零。这用反证法就能证明,如果有段的和是小与零的,那么之后这段子数组的和就必然大于当前子数组的和。通过这个性质,我们就只要从头到尾遍历数组,记录当前连续元素的和,如果当前的和小于零,就把和清零。最后记录下遍历过程中出现的最大和就好了。
简单的测试样例:
运行结果:
#include#include #include using namespace std;int main(){ int i,n,a,sum=0,ans=0; freopen("test.in","r",stdin); // freopen("test.out","w",stdout); cin>>n; for (i=1;i<=n;i++) { cin>>a; if (sum<0) sum=0; sum+=a; if (sum>ans) ans=sum; } cout< <