最大子数组问题
来源:互联网 发布:开个网络超市 编辑:程序博客网 时间:2024/06/08 14:07
#include <iostream>using namespace std;int FindMaxCrossingSubarray(int A[], int low, int mid, int high){int MaxLeftSum = 0;//保存目前为止找到的最大和int LeftSum = 0; //保存从最后一位往左的子数组的和for (int i = mid; i >= low; i--){LeftSum += A[i];if (LeftSum > MaxLeftSum){MaxLeftSum = LeftSum;}}int MaxRightSum = 0;int RightSum = 0;for (int j = mid + 1; j <= high; j++){RightSum += A[j];if (RightSum > MaxRightSum){MaxRightSum = RightSum;}}return MaxLeftSum + MaxRightSum;}int FindMaximumSubarray(int A[], int low, int high){int MaxLeftSum, MaxRightSum,MaxCrossSum;if (high == low){return A[low];}else{int mid = (low + high) / 2;MaxLeftSum = FindMaximumSubarray(A, low, mid);MaxRightSum = FindMaximumSubarray(A, mid + 1, high);MaxCrossSum = FindMaxCrossingSubarray(A, low, mid, high);}//返回三个之中最大的if (MaxLeftSum >= MaxRightSum&&MaxLeftSum >= MaxCrossSum){ return MaxLeftSum;}else if (MaxRightSum >= MaxLeftSum&&MaxRightSum >= MaxCrossSum){return MaxRightSum;}else{return MaxCrossSum;}}int main(){int A[16] = { 13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7 };int sum = FindMaximumSubarray(A,0,15);cout << sum << endl;system("pause");return 0;}
阅读全文
0 0
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 限制input输入类型
- [LeetCode] Maximum Product Subarray
- 数组和字符串的方法
- 每周推荐 v2017.6.2
- HDOJ 1815 Building roads(2-sat简介)
- 最大子数组问题
- java虚拟机---内存区域
- SQLite怎么统计一个数据库中有多少张表,视图或者触发器 .
- Java基础--类的访问权限
- 博客开通
- JdbcBaseReview系列之JdbcPrepare的前言
- 针对谷歌浏览器以及谷歌内核的浏览器默认最小字体12px的正确解决方案
- Android 自动递增版本号
- MFC——连连看