分治原理求最大和的连续子数组

上传人:油条 文档编号:20440848 上传时间:2017-09-09 格式:PDF 页数:3 大小:159.46KB
返回 下载 相关 举报
分治原理求最大和的连续子数组_第1页
第1页 / 共3页
分治原理求最大和的连续子数组_第2页
第2页 / 共3页
分治原理求最大和的连续子数组_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《分治原理求最大和的连续子数组》由会员分享,可在线阅读,更多相关《分治原理求最大和的连续子数组(3页珍藏版)》请在金锄头文库上搜索。

1、 /*问题描述:求解一个数组中具有最大和的连续子数组 */ #include #include #include #define INF INT_MIN using namespace std; struct ArrayData int max_left; int max_right; int sum; ; ArrayData* Find_Max_Crossing_SubArray(int *a, int low, int mid, int high); ArrayData* Find_MaxMin_Subarray(int *a, int low, int high); int main()

2、 int *a, size; a = NULL; size = 0; cout size; a = new intsize; cout ai; ArrayData *max; max = new ArrayData; max = Find_MaxMin_Subarray(a, 1, size); cout max_left max_right sum = low - 1; i-) sum += ai; if (sum left_sum) left_sum = sum; max-max_left = i; int right_sum = INF; sum = 0; for (int j = mi

3、d; j right_sum) right_sum = sum; max-max_right = j; max-sum = left_sum + right_sum; return max; ArrayData* Find_MaxMin_Subarray(int *a, int low, int high) if (high = low) ArrayData *minmax = new ArrayData; minmax-max_left = low; minmax-max_right = high; minmax-sum = alow - 1; return minmax; else int

4、 mid = (low + high) / 2; ArrayData*leftminmax = Find_MaxMin_Subarray(a, low, mid); ArrayData*rightminmax = Find_MaxMin_Subarray(a, mid + 1, high); ArrayData*crossminmax = Find_Max_Crossing_SubArray(a, low, mid, high); if (leftminmax-sum = rightminmax-sum & leftminmax-sum = crossminmax-sum) return leftminmax; else if (rightminmax-sum = leftminmax-sum & rightminmax-sum = crossminmax-sum) return rightminmax; else return crossminmax;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号