问题描述:假定你获得了投资挥发性化学公司的机会。给出一支股票17天价格表,要求求出买进卖出获得的最大化收益及买进时刻卖出时刻.......详见算法导论第三版
思路:所有连续子数组组合,然后从中选取最大的
c++代码
#include <iostream>
using namespace std;
class Array
{
private:
public:
int indexLow;
int indexHigh;
int arraySum;
};
Array maxSubArrayViolence(int array[],int len);
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=maxSubArrayViolence(A,length);
cout<<"最大子数组下标左值:"<<result.indexLow<<endl<<"最大子数组下标右值:"<<
result.indexHigh<<endl<<"最大子数组和:"<<result.arraySum<<endl;
return 0;
}
Array maxSubArrayViolence(int array[],int len)
{
Array maxSubArray;
for(int i=0;i<len;++i)
{
for(int j=i;j<len;++j)
{
int temp=0;//需要将上次的temp清零
for(int k=i;k<=j;++k)
temp+=array[k];
if(temp>maxSubArray.arraySum)
{
maxSubArray.arraySum=temp;//最大子数组求和
maxSubArray.indexLow=i;//最大子数组下标
maxSubArray.indexHigh=j;//最大子数组上标
}
}
}
return maxSubArray;//返回一个结构体
}
运行结果