算法4:求整型数组的连续子数组的最大和
来源:互联网 发布:windowsxp系统修复软件 编辑:程序博客网 时间:2024/06/06 07:14
算法4:求整型数组的连续子数组的最大和
输入一个整型数组,数组里既有正数也有负数,数组中连续一个或者多个组成整型子数组,每个子数组都有一个和,求所有子数组的最大和,要求时间复杂度为O(n)。
解题思路
使用贪婪算法,数组从开始往后遍历,记录最大和,当前和小于0时,当前子数组和置为0.
c++代码如下
//使用贪婪算法,遇到sum<0的情况,就将sum置0void GetSubMaxSum(int srcBuffer[],int srcBufferLen,int maxSubBuffer[],int& maxSubLength,int& maxSum){ if(srcBuffer == NULL || srcBufferLen <= 0) { maxSubBuffer = NULL; maxSum = 0; return; } maxSum = 0; int maxSubBufferLen = 0; int sum = 0; int beginIndex = 0; int endIndex = 0; for(int i = 0; i < srcBufferLen; i++) { sum +=srcBuffer[i]; if(sum > maxSum) { endIndex = i; maxSum = sum; } if(sum <= 0) { beginIndex = i; sum=0; } } maxSubLength = 0; for(int i = beginIndex; i <=endIndex; i++) { maxSubBuffer[maxSubLength++]=srcBuffer[i]; }}
测试代码如下
int _tmain(int argc, _TCHAR* argv[]){ const int srcLength = 10; int srcBuffer[srcLength] = {0}; cout<<"please input 10 int valude"<<endl; for(int i = 0; i < srcLength;i++) { cin>>srcBuffer[i]; } int maxSubBuffer[srcLength] = {0}; int maxSum = 0; int maxSubLength = 0; GetSubMaxSum(srcBuffer,srcLength,maxSubBuffer,maxSubLength,maxSum); cout<<"maxsum = "<<maxSum<<endl; for(int i = 0; i < maxSubLength; i++) { cout<<maxSubBuffer[i]<<" "; } cout<<endl; return 0;}
0 0
- 算法4:求整型数组的连续子数组的最大和
- 算法:求连续子数组的最大和
- [算法]求最大连续子数组和的PHP程序
- 【算法】求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- ServiceManager.getService和Context.getSystemService
- RMAN同字节序跨平台跨版本迁移数据库
- python爬虫(4)四种方法通过黑板客第二关
- php统计文件大小,以GB、MB、KB、B输出
- Eclipse控制台console乱码解决方法
- 算法4:求整型数组的连续子数组的最大和
- Python 多进程
- kafka运维日志一
- Python实现学生信息管理系统
- Pmem使用小结
- mysql 修改sql_mode 实现字符串管道‘||’连接
- Unity在ipad上触屏双指上下左右移动,单指上下左右旋转
- 递归例子
- Test2