问题描述:
假设你有一个数组,第i个元素是第i天给定股票的价格。如果只允许最多完成一个交易(即购买一个交易并且卖出一个股票),则设计一个算法来找到最大利润。
解题思路:
因为是找差值最大的,借用上一道House Robber的思路,声明一个数组dpmin,用来表示,当前最低的价格。遍历这个数组,当nums[i]-dpmin[i-1]大于当前差值cha时,就更新cha值,同时dpmin[i]与dpmin[i-1]相同;如果nums[i]<dpmin[i-1],就要更新dpmin[i]=nums[i];其他情况,也保持dpmin[i]与dpmin[i-1]相同
源代码如下:
class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.empty()) return 0;
vector<int> dpmin;
dpmin.push_back(prices[0]);
int cha=0;
for(int i=1;i<prices.size();i++)
{
if(prices[i]-dpmin[i-1]>cha)
{
cha=prices[i]-dpmin[i-1];
dpmin.push_back(dpmin[i-1]);
}
else if(prices[i]<dpmin[i-1])
dpmin.push_back(prices[i]);
else
dpmin.push_back(dpmin[i-1]);
}
return cha;
}
};
public:
int maxProfit(vector<int>& prices) {
if(prices.empty()) return 0;
vector<int> dpmin;
dpmin.push_back(prices[0]);
int cha=0;
for(int i=1;i<prices.size();i++)
{
if(prices[i]-dpmin[i-1]>cha)
{
cha=prices[i]-dpmin[i-1];
dpmin.push_back(dpmin[i-1]);
}
else if(prices[i]<dpmin[i-1])
dpmin.push_back(prices[i]);
else
dpmin.push_back(dpmin[i-1]);
}
return cha;
}
};