标签:
给出一个数组,第i个数代表第i天的价格,请选择一种策略,使得收益最大。每天仅能买卖一次
答案:
// 找出所有上涨区间,每个区间的第一天买、最后一天卖
// 输入int a[], length
bool hasPos = false; // 是否有持仓
for (int i = 0; i < length - 1; i++)
{
if (a[i + 1] < a[i]) // 明天价格下跌
{
if (hasPos) a[i] = -1; // 如果有持仓就卖
else a[i] = 0; // 没有持仓就不动
hasPos = false;
}
else if (a[i + 1] > a[i]) // 明天价格上涨
{
if (hasPos) a[i] = 0; // 有持仓就不动
else a[i] = 1; // 没有持仓就赶紧买
hasPos = true;
}
else a[i] = 0; // 价格不变就不动
}
a[length - 1] = hasPos ? -1 : 0; // 最后一天,有持仓就卖了
// 得到一组[0, 1, 0, 0, -1, ...]的结果,遇到1就买入,遇到-1就卖出
标签:
原文地址:http://www.cnblogs.com/anderslane/p/4865739.html