首页 > 代码库 > LeetCode Best Time to Buy and Sell Stock
LeetCode Best Time to Buy and Sell Stock
class Solution { public: int maxProfit(vector<int> &prices) { int len = prices.size(); if (len < 1) return 0; int minv = prices[0]; int maxv = prices[0]; int mprofit = 0; for (int i=1; i<len; i++) { int cur = prices[i]; if (cur < minv) { minv = cur; maxv = cur; } if (cur > maxv) { maxv = cur; if (maxv - minv > mprofit) mprofit = maxv - minv; } } return mprofit; } };
这个解法应该算是贪婪吧,还可以把后缀序列的最大值求出来,然后在扫一边每个元素就可以知道如果当前买入,在后面的最高价是多少,从而求出最高利润,如果是负值则不进行交易,利润为0,下面给出dp版本的代码
class Solution { public: int maxProfit(vector<int> &prices) { int len = prices.size(); if (len < 2) return 0; vector<int> maxv(len, 0); maxv[len - 1] = prices.back(); for (int i = len - 2; i>=0; i--) { if (prices[i] > maxv[i + 1]) { maxv[i] = prices[i]; } else { maxv[i] = maxv[i + 1]; } } int mprofit = 0; for (int i=0; i<len; i++) { int profit = maxv[i] - prices[i]; if (profit > mprofit) mprofit = profit; } return mprofit; } };
两者都是O(n)时间,只不过后者用了额外空间
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。