您的位置:首页 > 其它

已知股价序列,计算在什么时候买和卖获益最大

2015-03-05 10:27 197 查看
问题:一个股价序列,已知每个时间点的股价,问什么时候买和卖获利最大?时间复杂度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比较。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐