程序员编程艺术:求连续子数组的最大和

来源:互联网 发布:预防网络诈骗图片 编辑:程序博客网 时间:2024/04/28 17:25

鸣谢:感谢@July,您的博客给予我很大的帮助,增强了我学习的动力。希望分享的力量永传!!!

问题来源:http://blog.csdn.net/v_JULY_v/article/details/6444021

问题来源作者:@July

本文作者:@baoquanz

本文仅给予一种实现,增加输出最大序列。

#include <iostream>using namespace std;//left和right记录最大序列的开始和结束位置int max_func(int* a, int len, int& left, int& right){int* b = new int[len];right = 0;int max = a[0];b[0] = a[0];for (int i=1; i<len; ++i){if (b[i-1] <= 0){b[i] = a[i];}else{b[i] = b[i-1] + a[i];}if (b[i] > max){max = b[i];right = i;}}int tmp = right;left = tmp;for (; tmp>=0; --tmp) //寻找left位置{if (b[tmp]<0){break;}left = tmp;}delete[] b;return max;}int main(){int N;cin>>N;int* a = new int[N];for (int i=0; i<N; ++i){cin>>a[i];}int left, right;cout<<max_func(a, N, left, right)<<endl;for (; left<=right; ++left){cout<<a[left]<<" ";}cout<<endl;delete[] a;return 0;}


0 0
原创粉丝点击