賣買股票的最佳時機

 

1.1 問題描述

給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。

設計一個算法來計算你所能獲取的最大利潤,並輸出得到最大利潤時須要對股票作的賣買操做。你能夠儘量地完成更多的交易(屢次買賣一支股票)。ios

在賣買股票的最佳收益的基礎上增長賣買股票的時機,即須要計算在哪一天買入股票和在哪一天賣出股票,若是當天要賣出股票則輸出-1,若是當天要買入股票則輸出1,若是當天不作任何操做則輸出0.

注意:你不能同時參與多筆交易(你必須在再次購買前出售掉以前的股票)。算法

1.3.1 樣例1

輸入: [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;
}
相關文章
相關標籤/搜索