LeetCode:121.股票问题(简单)
Posted billowj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode:121.股票问题(简单)相关的知识,希望对你有一定的参考价值。
题目描述:一次股票交易包含买入和卖出,只进行一次交易,求最大收益。
只要记录前面的最小价格,将这个最小价格作为买入价格,然后将当前的价格作为售出价格,查看当前收益是不是最大收益。
主要解题思路是转换成求最大连续子数组,整理了三个解法,单调栈我是没有想到的。。
常规解:
1.
class Solution { public: int maxProfit(vector<int>& prices) { if(prices.size() == 0) return 0; int index = prices[0]; int ans = 0; for(int i = 1; i < prices.size(); i++){ if(index > prices[i]) index = prices[i]; if(index < prices[i]) ans = max(ans, prices[i] - index); } return ans; } };
2.
假设我们在第i天买入,第j (j > i)天卖出股票,获得的利润是prices[j] - prices[i].
记j - i = k,那么由于数学关系式可知:
prices[j] - prices[i] = (prices[j] - prices[i+k-1]) + (prices[i+k-1] - prices[i+k-1]) + .... + (prices[i+1] - prices[i])
那么知道每一个prices[i+1] - prices[i]后本题求max(prices[j] - prices[i])可以转换为求最大连续子数组和的问题
如股票价格为[7,1,5,3,6,4],则可以转换为求数组[-6, 4, -2, 3, -2]的最大连续子数组之和。
作者:melo7
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/solution/jiang-ti-mu-zhuan-huan-wei-zui-da-lian-xu-zi-shu-z/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution { public: int maxProfit(vector<int> &prices) { if (prices.size() <= 1) { return 0; } int size = prices.size() - 1; for (int i = 0; i < size; i++) { prices[i] = prices[i + 1] - prices[i]; } int res = maxSubArray(prices, size); return (res > 0) ? res : 0; } int maxSubArray(vector<int> &nums, int right) { int res = nums[0]; for (int i = 1; i < right; i++) { if (nums[i - 1] > 0) { nums[i] += nums[i - 1]; } res = max(res, nums[i]); } return res; } };
3.
维护一个单调栈。
class Solution { public: int maxProfit(vector<int>& prices) { int ans = 0; vector<int> St; prices.emplace_back(-1); \ 哨兵???? for (int i = 0; i < prices.size(); ++ i){ while (!St.empty() && St.back() > prices[i]){ \ 维护单调栈?? ans = std::max(ans, St.back() - St.front()); \ 维护最大值 St.pop_back(); } St.emplace_back(prices[i]); } return ans; } }; 作者:wen-mu-yang 链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/solution/c-li-yong-shao-bing-wei-hu-yi-ge-dan-diao-zhan-tu-/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
以上是关于LeetCode:121.股票问题(简单)的主要内容,如果未能解决你的问题,请参考以下文章