最大子数组和
2016-05-04 19:43
183 查看
最大子数组和问题:
给定一个数组A[0,1...,N-1],求A的连续子数组,使得该子数组和最大。
如:数组:1,-2,3,10,-4,7,2,-5
子数组:3,10,-4,7,2;该子数组和为 18。
程序实现:
运行结果:
转载请注明出处:
C++博客园:godfrey_88
http://www.cnblogs.com/gaobaoru-articles/
给定一个数组A[0,1...,N-1],求A的连续子数组,使得该子数组和最大。
如:数组:1,-2,3,10,-4,7,2,-5
子数组:3,10,-4,7,2;该子数组和为 18。
程序实现:
/*************************************** FileName MaxSumSubArray.cpp Author : godfrey CreatedTime : 2016/5/4 ****************************************/ #include <iostream> #include <cstring> #include <vector> #include <algorithm> #include <stdio.h> #include <stdlib.h> using namespace std; int MaxSumSubArray(int* A,int size,int& from,int& to){ if( !A || size <= 0){//错误检测 from = -1; to = -1; return 0; } from = to = 0; int sum = A[0];//当前子串的和 int result = sum;//当前子串的最优解 int FromUpdate; for(int i=1;i<size;i++){ if(sum > 0){ sum += A[i]; } else{ sum = A[i]; FromUpdate = i;//在sum<0时,更新子数组起点 } if(result < sum){//当前最优解更新的时候,起点终点都更新 result = sum; from = FromUpdate; to = i; } } return result; } int main() { int a[] = {1,-2,3,10,-4,7,2,-5}; int start,end; int result = MaxSumSubArray(a,sizeof(a)/sizeof(int),start,end); cout<<"the MaxSumSubArray: "; cout<<result<<endl; cout<<"start: "<<start<<" end: "<<end<<endl; cout<<"The subArray is : "<<endl; for(int i = start;i<=end;i++){ cout<<a[i]<<" "; } cout<<endl; return 0; }
运行结果:
转载请注明出处:
C++博客园:godfrey_88
http://www.cnblogs.com/gaobaoru-articles/
相关文章推荐
- 删除恶意添加hao123、2345为浏览器默认主页的方法
- Nginx Proxy buffer 工作原理
- 获得音乐列表
- Visual Servo Control 中的公式笔记
- 题目1023:EXCEL排序 学习
- Struts2笔记02
- android开发博客
- [转载]巧用二进制实现0/1状态的枚举
- HashMap排序题
- 【一天一道LeetCode】#40. Combination Sum II
- 希尔排序
- 【一天一道LeetCode】#40. Combination Sum II
- HDU 4738 双联通分量
- Struts2笔记01
- C++第四次实验-----继承和派生
- Java基础第三天_数组
- 毕业论文中的“参考文献”获取(经验三---获取某篇文章的文献格式)
- IntelliJ打包可执行的Jar包
- 指定时间,跳转页面
- Junit之测试顺序---FixMethodOrder