买卖股票的题大概有 6 道,可以使用动态规划全部解决,但这题是最简单的一道,如果使用动态规划,有点杀鸡用牛刀了,没必要。
这题说的是只能交易一次,求所获得的最大利润,也就是在最低价的时候买入,在后面最高价的时候卖出,我们可以使用一个变量 minV
来记录前面遍历过的最小值,这个最小值不是固定的,也是会跟着变动的,然后用数组后面的值减去这个最小值差,这个差就是利润,我们只需要保存最大利润即可。
public int maxProfit(int[] prices) {
int minV = prices[0];// 遍历过的最小值
int ans = 0;
for (int price : prices) {
minV = Math.min(minV, price);// 记录最小值
ans = Math.max(ans, price - minV);// 记录差值的最大值
}
return ans;
}
public:
int maxProfit(vector<int> &prices) {
int minV = prices[0];// 遍历过的最小值
int ans = 0;
for (int price: prices) {
minV = min(minV, price);// 记录最小值
ans = max(ans, price - minV);// 记录差值的最大值
}
return ans;
}