給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。
設計一個算法來計算你所能獲取的最大利潤,並輸出得到最大利潤時須要對股票作的賣買操做。你能夠儘量地完成更多的交易(屢次買賣一支股票)。ios
在賣買股票的最佳收益的基礎上增長賣買股票的時機,即須要計算在哪一天買入股票和在哪一天賣出股票,若是當天要賣出股票則輸出-1,若是當天要買入股票則輸出1,若是當天不作任何操做則輸出0.
注意:你不能同時參與多筆交易(你必須在再次購買前出售掉以前的股票)。算法
輸入: [7,1,5,3,6,4]
輸出: 0 1 -1 1 -1 0
解釋: 在第 2 天(股票價格 = 1)的時候買入,在第 3 天(股票價格 = 5)的時候賣出, 這筆交易所能得到利潤 = 5-1 = 4 。
隨後,在第 4 天(股票價格 = 3)的時候買入,在第 5 天(股票價格 = 6)的時候賣出, 這筆交易所能得到利潤 = 6-3 = 3 。數組
代碼:spa
#include<iostream> #include<vector> using namespace std; int main() { int temp; int flag = 0;//記錄賣買狀況 vector<int>price; vector<int>vec; while (cin >> temp) { price.push_back(temp); } price.push_back(0);//主動的往價格表最後一天以後加入一個價格爲0的股票價格,這樣才能對股票價格作一個for循環判斷就能夠而不須要再對 //最後一天的股票進行一次單獨的判斷,0是最低價格則能夠使得遞增的股票價格也能在最後一天作賣出操做,若是不是遞增則最後一天也能進行判斷 for (int i = 0; i < price.size()-1; i++) { if (flag == 0)//還未買入 { if (price[i + 1] > price[i]) { flag = 1; vec.push_back(1); } else { vec.push_back(0); } } else//已經買入 { if (price[i + 1] > price[i]) { vec.push_back(0); } else { vec.push_back(-1); flag = 0; } } } for (auto it : vec) { cout << it << " "; } cout << endl; return 0; }