最佳買賣股票時間

題目:

給出一個數組,第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就賣出

相關文章
相關標籤/搜索