股票最大收益问题及数组最大差值问题
2015-04-30 16:51
309 查看
</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;}
相关文章推荐
- 最大股票收益问题(数组最大差问题)
- 第四章 最大子数组问题(股票最大收益) C++实现 算法导论
- 最多n次购买时股票最大收益问题
- 股票什么时候买进什么时候卖出收益最大----求最大子数组(算法导论第四章 4.1-3)
- 股票最大收益问题3 Best Time to Buy and Sell Stock III
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<
- 数组最大差值问题
- 关于顺序数组求最大差值或最大收益算法
- JAVA股票问题计算你能获得的最大收益
- 股票最大收益问题
- 买卖股票收益最大问题
- 【面试】求数组元素最大差值的问题
- 【面试】求数组元素最大差值的问题
- 最大子数组问题:股票
- 面试题38:股票最大收益问题
- 最大子数组问题
- 求数组排序后相邻数的最大差值
- 算法导论——分治法——最大子数组问题
- 最大子数组问题
- 求数组相邻元素差值的最大值快速算法(C++版)