题目描述: 买卖股票的最佳时机
假设你有一个数组,其中第 i 个元素是一支给定股票第 i 天的价格。
如果您只能完成最多一笔交易(即买入和卖出一股股票),则设计一个算法来找到最大的利润。
示例 1:
输入: [7, 1, 5, 3, 6, 4] 输出: 5 最大利润 = 6-1 = 5(不是 7-1 = 6, 因为卖出价格需要大于买入价格)
示例 2:
输入: [7, 6, 4, 3, 1] 输出: 0 在这种情况下, 没有交易完成, 即最大利润为 0。
解题思路:
a[i][0]表示前 i 项的最大的利润。
a[i][1]表示前 i 项里最小股票。
递推式如代码所示。
代码:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int siz = prices.size();
if(siz == 0) return 0;
int a[siz][2];
a[0][0] = 0;
a[0][1] = prices[0];
for(int i = 1 ; i < siz ; i ++) {
a[i][0] = max(prices[i]-a[i-1][1], a[i-1][0]);
a[i][1] = min(prices[i], a[i-1][1]);
}
return a[siz-1][0];
}
};