您的位置:首页 > 其它

#leetcode#121. Best Time to Buy and Sell Stock

2016-04-26 20:25 295 查看
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.

思路1

将n天分为前i天和后n-i天,维护两个数组,记录前i天的最小价格和后n-i天的最大价格,随后相减寻找最大值

class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size()==0) return 0;
int n=prices.size();
int max
={0};
int min
={0};
int c
={0};
int i;
min[0]=prices[0];
max[n-1]=prices[n-1];
for(i=1;i<n;i++)
{
min[i]=min[i-1];
if(prices[i]<min[i])
{
min[i]=prices[i];
}
max[n-1-i]=max[n-i];
if(prices[n-1-i]>max[n-1-i])
{
max[n-1-i]=prices[n-1-i];
}
}
int ans=0;
for(i=0;i<n;i++)
{
int profit=max[i]-min[i];
if(ans<profit)
ans=profit;
}
return ans;
}
};

思路2

一次遍历,仅需要维护最小价格和收益两个变量。

首先判断当天与之前最小价格之间的关系,判断是否需要更新最小价格。class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size()==0) return 0;
int n=prices.size();
int min=prices[0];
int ans=0;
int i;
for(i=1;i<n;i++)
{
if(prices[i]<min)
min=prices[i];
int fit=prices[i]-min;
if(fit>ans)
ans=fit;
}
return ans;
}
};

其次判断当天价格减去最小价格的大小,判断是否需要更新收益。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: