您的位置:首页 > 其它

Best Time to Buy and Sell Stock

2016-05-23 10:28 274 查看
Say you have an array for which the ith element is the price of a given stock on day i.

If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.

思路:一个数组,每个元素代表第i天的股票价格。最多只能交易一次,也就是买进一次,卖出一次。在整个过程找到最小值和最大值,且让最小值的所在的位置在最大值的前面,那么两者之差就是最大的收益了。

方法一:初始最小值设置minRes为prices[0],最大收益res计为0,遍历一遍数组,每一个prices[i](i>=1)和minRes比较,算出当前的最小值,而后prices[i]-minRes和res比较记录下当前最大的收益。整个数组遍历一遍,就求得了最大的收益。

class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size()<2)
return 0;
int minRes=prices[0];
int res=0;
for(int i=1;i<prices.size();i++)
{
if(prices[i]<minRes)
minRes=prices[i];
res=res<prices[i]-minRes?prices[i]-minRes:res;
}
return res;
}
};

方法二:求最大的prices[i]-prices[i-1]的连续子数组最大和
class Solution {
public:
int maxProfit(vector<int>& prices) {
//计算prices[i]-prices[i-1]求最大的子段和
if(prices.size()<2)
return 0;
int res=0;
int cur;
for(int i=1;i<prices.size();i++)
{
if(cur<0)
cur=0;
cur+=prices[i]-prices[i-1];
res=res<cur?cur:res;
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: