</pre><pre code_snippet_id="656629" snippet_file_name="blog_20150430_2_4601523" name="code" class="cpp">
#include<stdio.h>
#include <stdlib.h>
//说明 只有返回值为零 则表示没有收益 或者没有找到最多的差值哦
int max_profit(int a[],int length) //n 天中 买卖股票最大收益 不限次数
{
if(length==0) return 0;
int max = 0;
int index_minbuy = 0;
for(int i =1;i<length;i++)
{
if(a[i]<a[i-1])
{
//贪心法,第I天跌了 则这个时候则应该在第i -1 天的时候 卖出 然后在第I天买入
max += a[i-1] - a[index_minbuy];
index_minbuy = i;
}
}
//最后一天要单独计算
if(a[length -1] > a[index_minbuy])
max += a[length - 1] - a[index_minbuy];
return max;
}
//最有解法二 计算每个相邻的差,大于零 则利润累加 <span style="font-family: Arial, Helvetica, sans-serif;">n 天中 买卖股票最大收益 不限次数</span>
int max_p(int a[],int length)
{
if(length==0) return 0;
int max = 0;
for(int i =1;i<length;i++)
{
if(a[i-1] <a[i])
{
max += a[i] - a[i-1];
}
}
return max;
}
int findMaxDiff_1(int* a,int lengh) //右边>左边 求一个数组中最大差值
{
int i = 0;
if(lengh==0||lengh==1) return 0;
if(lengh==2)
{
return (a[2] - a[1] > 0?a[2] - a[1]:0);
}
int min = a[0];
int max = a[2] - a[1];
for(int i =2;i<lengh;i++)
{
if(a[i-1]<min)
{
min = a[i-1];
}
if(a[i] - min >max)
{
max = a[i] - min;
}
}
return max;
}
int findMaxDiff_2(int* a,int lengh) //左边 > 右边 <span style="font-family: Arial, Helvetica, sans-serif;">求一个数组中最大差值 </span>
{
int i = 0;
if(lengh==0||lengh==1) return 0;
if(lengh==2)
{
return (a[1] - a[2] > 0?a[1] - a[2]:0);
}
int max = a[0];
int max_ = a[1] - a[2];
for(int i =2;i<lengh;i++)
{
if(a[i-1]>max)
{
max = a[i -1];
}
if(max - a[i] >max_ )
{
max_ = max - a[i];
}
}
return max_;
}
int max_two_profit(int a[],int length) //股票最大收益 只允许最多买卖两次
{
if(length==0||length==1) return 0;
if(length==2)
{
return (a[2] - a[1] > 0)?a[2] - a[1]:0;
}
int max_pro = 0;
for(int i =1;i<length-1;i++)
{
if(findMaxDiff_1(a,i+1) + findMaxDiff_1(a+i,length - i) > max_pro)
max_pro = findMaxDiff_1(a,i+1) + findMaxDiff_1(a+i,length - i);
}
return max_pro;
}
int main()
{
int a[] = {1,4,2,8,100};
printf("%d\n",max_profit(a,5));
printf("%d\n",max_p(a,5));
printf("%d\n",findMaxDiff_2(a,5));
printf("%d\n",max_two_profit(a,5));
system("pause");
return 0;
}