分治思想的求最大子数组和代码实现(C++)
来源:互联网 发布:阿里云如何升级配置 编辑:程序博客网 时间:2024/06/16 04:46
头文件
#pragma oncestruct Max_Sum_Rusult{ int sum; int left; int rigth;};class find_MaxSum_SubArray{public: static Max_Sum_Rusult getMaxSumOfSubArray(int *a,int left,int right);//提供给外部调用的函数private: //求跨越中间结点的最大值 static Max_Sum_Rusult _getMaxOfSubArrayAboutCrossing(int *a,int left,int mid,int right); static Max_Sum_Rusult _getResult(int left,int right,int sum);};
代码实现
#include "stdafx.h"#include "find_MaxSum_SubArray.h"#include <limits>Max_Sum_Rusult find_MaxSum_SubArray::getMaxSumOfSubArray(int *a,int left,int right){ if (left == right) { return _getResult(left,right,a[left]); } int mid = (left+right)/2; Max_Sum_Rusult leftResult = getMaxSumOfSubArray(a,left,mid); Max_Sum_Rusult rightResult = getMaxSumOfSubArray(a,mid+1,right); Max_Sum_Rusult crossResult = _getMaxOfSubArrayAboutCrossing(a,left,mid,right); Max_Sum_Rusult maxResult = leftResult.sum >rightResult.sum ? leftResult : rightResult; maxResult = maxResult.sum >crossResult.sum ? maxResult : crossResult; return maxResult;}Max_Sum_Rusult find_MaxSum_SubArray::_getMaxOfSubArrayAboutCrossing(int *a,int left,int mid,int right){ int leftSum =INT_MIN; int rigthSum = INT_MIN; int i,sum; int max_left,max_rigth; for (sum =0,i= mid;i>=left;--i) { sum += a[i]; if (leftSum<sum) { leftSum = sum; max_left = i; } } for (sum = 0,i= mid+1;i<=right;++i) { sum += a[i]; if (rigthSum<sum) { rigthSum = sum; max_rigth = i; } } return _getResult(max_left,max_rigth,leftSum+rigthSum);}Max_Sum_Rusult find_MaxSum_SubArray::_getResult(int left,int right,int sum){ Max_Sum_Rusult result; result.left = left; result.rigth = right; result.sum = sum; return result;}
0 0
- 分治思想的求最大子数组和代码实现(C++)
- 整数的除法 分治思想 求最大子向量和
- 分治法求数组最大连续子序列的和
- 分治算法求子数组的最大和
- 求子数组的最大和(O(n)和分治法O(nlogn))
- 求子数组的最大和(O(n)和分治法O(nlogn))
- 分治策略结合递归思想求最大子序列和
- 算法 - 求子数组的最大和(C++)
- c实现 求一个数组中最大子序列的和 (两种方法)
- 最大子数组问题--分治法的思想
- 分治法求数组的最大子数组
- 递归求数组最大最小值(分治思想)
- 递归求数组最大最小值(分治思想)
- 分治算法递归求最大子数组,下标,和
- Java实现:求子数组的最大和(数组)
- 分治算法求最大子数组以及其对应的下标<c/c++源代码>
- 用暴力求解法和分而治之法求解最大子数组问题的Java代码实现
- 利用分治法求最大子数组
- 在hibernate中
- webloigc webservice
- @ManyToOne(fetch=FetchType.LAZY)
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- 我还太菜
- 分治思想的求最大子数组和代码实现(C++)
- 十道海量数据处理面试题与十个方法大总结
- failover inloving the physical standby
- GeneratedValue
- 使用ContentProvide读写短信
- springmvc+mybatis 配置多数据源相互切换
- crm2011fetchxml分页查询
- 关于Spring的69个面试问答——终极列表
- RequestMapping("/user"