leetcode 121 股票买卖问题系列
描述: 给一些列数字,表示每条股票的价格,如果可以买卖一次(不能同一天买和卖),求最大利益(即差最大)。 其他三道问题是,如果能买卖无限次,买卖两次,买卖k次。 题一: 实质是求后面一个数减前一个数的最大差值。 维护一个最小值,和当前最大值。只需遍历一次,空间也是常数。 int maxProfit(vector<int>& prices) { if (prices.size() < 1) return 0; int min_ = prices[0]; int ret = 0; for (int i = 1; i < prices.size(); i++) { ret = max(ret, prices[i] - min_); min_ = min(min_, prices[i]); } return ret; } 题二: 只要是后一个数比前一个大,都增。 int maxProfit(vector<int>& prices) { if (prices.size() < 1) return 0; int ret = 0; for (int i = 0; i < prices.size() - 1; i++) { ret += max(prices[i + 1] - prices[i], 0); } return ret; } 题三: 可进行两次操作。 其中一个思路,可以关注分界点