已知股价序列,计算在什么时候买和卖获益最大
2015-03-05 10:27 李涛的技术博客 阅读(251) 评论(0) 编辑 收藏 举报问题:一个股价序列,已知每个时间点的股价,问什么时候买和卖获利最大?时间复杂度O(n)。
假设股价按照时间点顺序放在了一个数组里,假设股价有升有降,就是说股价序列不是递减的。需要记录买入点和卖出点(用数组下标代替)。
(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比较。