【编程之法】最大连续子数组和
来源:互联网 发布:python counter 升序 编辑:程序博客网 时间:2024/05/16 07:37
题目描述
给定一个整数数组,数组里可能有正数、负数和零。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值,并输出此子数组。例如,如果输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},那么输出为该子数组的和18,和该子数组3 10 -4 7 2。
动态规划(编程之美P40,动态规划算法改编)
- currSum(i) = max{0, currSum(i-1)} + a[i];
- 根据currSum以及maxSum的变化,确定子数组的开始和结束位置。
#include<iostream>#include<cstdio>#include<vector>using namespace std;int main(){ int begin = 0; // 连续数组的起始和终止位置 int end = 0; vector<int> v; int tmp; while(cin >> tmp) { v.push_back(tmp); } int currSum = 0; int maxSum = v[0]; for(int i = 0; i < v.size(); ++i) { if(currSum >= 0) { currSum += v[i]; } else { currSum = v[i]; begin = i; } if(currSum > maxSum) { maxSum = currSum; end = i; } } for(int i = begin; i <= end; ++i) { cout << v[i] << " "; } cout << endl; cout << "MaxSum: " << maxSum; return 0;}
运行结果
0 0
- 【编程之法】最大连续子数组和
- 《编程之法》:最大连续子数组和
- 剑指offer-连续子数组的最大和----编程之美-连续子数组的最大和
- 连续子数组最大和
- 连续最大子数组和
- 连续子数组最大和
- 最大连续子数组和
- 连续子数组最大和
- 最大连续子数组和
- 最大连续子数组和
- 最大连续子数组和
- 最大连续子数组和
- 最大连续子数组和
- 最大连续子数组和
- 最大连续子数组和
- 最大连续子数组和
- 最大连续子数组和。
- 最大子数组和(连续)
- POJ:2914 Minimum Cut(暴力枚举并查集)
- hdoj5326
- linux线程同步:条件变量
- struts检验
- JTextArea设置滚动条
- 【编程之法】最大连续子数组和
- listview上的CursorAdapter使用
- HDU 1142 A Walk Through the Forest (dijkstra+记忆化搜索)
- Linux Smack 学习总结
- 自动装箱(autoboxing)与自动拆箱语(auto-unboxing)法糖
- poj3393
- EasyUI 树形菜单网格
- nginx的哈希表结构--ngx_hash_t
- linphone-PayloadType.java文件分析