最大连续子序列和
来源:互联网 发布:version mac 破解版 编辑:程序博客网 时间:2024/05/01 12:07
#include <iostream>#include <cstring>#include <string>using namespace std;int one(int A[], int n){int MaxSum = 0;for(int i=0; i<n; i++){int ThisSum = A[i];for(int j=i+1; j<n; j++){ThisSum += A[j];if(ThisSum > MaxSum)MaxSum = ThisSum;}}return MaxSum;}int two(int A[], int l , int r){if(l==r){ //递归出口if(A[l]>0)return A[l];elsereturn 0;}int mid = (l+r)/2;int LeftMax = two(A, l, mid); //计算左区间最值int RightMax = two(A, mid+1, r); //计算右区间最值int leftmax=0, leftsum=0; //计算从mid开始的到l的最大连续子序列和for(int i=mid; i>=l; i--){leftsum += A[i];if(leftsum > leftmax)leftmax = leftsum;}int rightmax=0, rightsum=0; //计算从mid+1到r的最大连续子序列和for(int i=mid+1; i<r; i++){rightsum += A[i];if(rightsum > rightmax)rightmax = rightsum;}return max(max(LeftMax, RightMax), leftmax+rightmax); //三值比较}int three(int A[], int n){int MaxSum = 0, ThisSum = 0;for(int i=0; i<n; i++){ThisSum += A[i];if(ThisSum > MaxSum)MaxSum = ThisSum; //MaxSum记录着之前的最大值else if(ThisSum < 0)ThisSum = 0;}return MaxSum;}int main(){int A[8] = {4, -3, 5, -2, -1, 2, 6, -2};cout << "this is sol1: "<< one(A, 8) <<endl;cout << "this is sol2: "<< two(A, 0, 7) <<endl;cout << "this is sol3: "<< three(A, 8) <<endl;return 0;}
0 0
- 连续子序列最大和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- 最大连续子序列和
- exports与module.exports的区别
- CSS中父div与子div——子div有内容,父div高度却为0?
- 算法--排序
- 微信web协议分析和实现微信机器人(微信网页版 wx2.qq.com)
- 【Google官方译文】Styles and Themes
- 最大连续子序列和
- Arduino学习(六) 继电器实验
- Service服务详解以及如何使service服务不被杀死
- LA3708-Graveyard
- Docke 1.12 基础篇:48条命令(1)
- Arduino学习(七)中断
- [LeetCode] 198. House Robber
- sql 几种分页方法
- 约会问题