最大子数组问题-c++代码实现及运行实例结果
2017-12-15 11:31
856 查看
问题描述:假定你获得了投资挥发性化学公司的机会。给出一支股票17天价格表,要求求出买进卖出获得的最大化收益及买进时刻卖出时刻.......详见算法导论第三版
伪代码
c++代码
运行结果
伪代码
c++代码
#include <iostream> using namespace std; /*数组需要下标,定义结构体*/ class Array { private: public: int indexLow; int indexHigh; int arraySum; }; Array findMaxSubArray(int array[],int low,int high); Array findMaxArray(Array L,Array R,Array M); int main() { int A[]={ 2, 1,-6, 5,-9, 7, 3, 4,-5, 8, 6}; int length=sizeof(A)/sizeof(A[0]); cout<<"输入的数组为:"<<endl; for(int i=0;i<length;++i) cout<<A[i]<<" "; cout<<endl; Array result=findMaxSubArray(A,0,length-1); cout<<"最大子数组下标左值:"<<result.indexLow<<endl<<"最大子数组下标右值:"<< result.indexHigh<<endl<<"最大子数组和:"<<result.arraySum<<endl; return 0; } Array findMaxSubArray(int array[],int low,int high) { Array leftSubArray,middleSubArray,rightSubArray;//定义三个数组 int indexLowTemp,indexHighTemp;//定义下标 int leftSubArrayTemp=0;//定义左边数组 int rightSubArrayTemp=0; int mLeftSum=0;//定义中间量往左走的数组和 int mRightSum=0; int middle=(low+high)/2; /*递归结束条件,数组只有一个数时*/ if(low==high) { Array result; result.indexLow=low; result.indexHigh=high; result.arraySum=array[high]; return result; } /*数组数大于等于2时*/ leftSubArray=findMaxSubArray(array,low,middle);//递归 rightSubArray=findMaxSubArray(array,middle+1,high); for(int i=middle;i>=low;--i) { leftSubArrayTemp=leftSubArrayTemp+array[i]; if(leftSubArrayTemp>mLeftSum) { mLeftSum=leftSubArrayTemp; indexLowTemp=i; } } for(int j=middle+1;j<=high;++j) { rightSubArrayTemp=rightSubArrayTemp+array[j]; if(rightSubArrayTemp>mRightSum) { mRightSum=rightSubArrayTemp; indexHighTemp=j; } } middleSubArray.indexLow=indexLowTemp; middleSubArray.indexHigh=indexHighTemp; middleSubArray.arraySum=mLeftSum+mRightSum;//左边子数组加上右边子数组 return findMaxArray(leftSubArray,middleSubArray,rightSubArray);//找到三个数组中的最大那一个 } Array findMaxArray(Array L,Array M,Array R) { Array max; max=L; if(max.arraySum<M.arraySum) max=M; if(max.arraySum<R.arraySum) max=R; return max; }
运行结果
相关文章推荐
- 最大子数组问题-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-c++代码实现及运行实例结果
- 最大子数组问题-c++代码实现及运行实例结果
- 最大子数组问题-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-c++代码实现及运行实例结果
- 最大子数组问题-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-c++代码实现及运行实例结果