已知股价序列,计算在什么时候买和卖获益最大
2015-03-05 10:27
197 查看
问题:一个股价序列,已知每个时间点的股价,问什么时候买和卖获利最大?时间复杂度O(n)。
假设股价按照时间点顺序放在了一个数组里,假设股价有升有降,就是说股价序列不是递减的。需要记录买入点和卖出点(用数组下标代替)。
(1)获利最大值初始化为INT_MIN。买入股价和买入点初始化为数组的第一个元素。
(2)从第二个元素开始遍历数组,如果当前股价比买入股价高,则求获利值。如果比当前获利最大值大,则修改获利最大值和卖出点。
(3)如果当前股价小于等于买入股价,则把买入股价和买入点置为当前点。
代码如下:
如果考虑股价是递减的情况,对于遍历的任何数,都要计算当前股价和买入价的价值,并和max比较。
假设股价按照时间点顺序放在了一个数组里,假设股价有升有降,就是说股价序列不是递减的。需要记录买入点和卖出点(用数组下标代替)。
(1)获利最大值初始化为INT_MIN。买入股价和买入点初始化为数组的第一个元素。
(2)从第二个元素开始遍历数组,如果当前股价比买入股价高,则求获利值。如果比当前获利最大值大,则修改获利最大值和卖出点。
(3)如果当前股价小于等于买入股价,则把买入股价和买入点置为当前点。
代码如下:
int bestBenifit(int arr[], int n, int& buy, int& sell) { assert(arr != NULL && n > 1); buy = 0; sell = 0; int max = INT_MIN; int buy_p = arr[0]; for (int i = 1; i < n; i++) { if (arr[i] > buy_p) { if (max < arr[i] - buy_p) { max = arr[i] - buy_p; sell = i; } } else { buy_p = arr[i]; buy = i; } } return max; }
如果考虑股价是递减的情况,对于遍历的任何数,都要计算当前股价和买入价的价值,并和max比较。
相关文章推荐
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<
- 大学时候想的一个算法——计算数组中最大和序列
- 计算最大连续子序列之和
- SQL计算字符串中最大的递增子序列的方法
- 在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。
- 计算一个数组中最大子序列的和
- USTC机试—计算连续子序列之和的最大值
- 51Nod-1062 序列中最大的数【序列计算+打表】
- 序列中最大的数【序列计算+打表】
- 计算在已知字符串中所有回文子序列的数目
- 关于计算最大子序列的四种方法
- 以时间复杂度O(n)计算最大子序列和
- 计算最大子序列和算法
- 计算最大子序列
- Java循环练习:已知s=1×2×3×…×n,计算出s不大于5000时n的最大值
- 文本比较算法Ⅵ——用线性空间计算最大公共子序列(翻译贴)
- 每天一道LeetCode-----计算给定序列中所有长度为k的滑动窗的最大值集合
- 计算最大序列和算法
- 算法-计算递增最大子序列长度(动态规划)
- 大学时候想的一个算法——计算数组中最大和序列