本文主要是介绍稀碎从零算法笔记Day7-LeetCode:买卖股票的最佳时机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题型:数组、动态规划
链接:121. 买卖股票的最佳时机 - 力扣(LeetCode)
来源:LeetCode
题目描述
给定一个数组 prices
,它的第 i
个元素 prices[i]
表示一支给定股票第 i
天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0
。
题目样例
示例 1:
输入:[7,1,5,3,6,4] 输出:5 解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例 2:
输入:prices = [7,6,4,3,1] 输出:0 解释:在这种情况下, 没有交易完成, 所以最大利润为 0。
提示:
1 <= prices.length <= 105
0 <= prices[i] <= 104
题目思路
这题可以暴力解:两个循环把所有的【购入、出售】情况全列出来,但是时间复杂度太高了
另一种只【遍历一次】即可:即每到一个点,①如果这个点是【最小值】(跟之前的元素比),那就以该点为【购入】,并考虑下面每个点出售时的利润②不断比较【利润】和之前保存的利润的大小,以实现不断更新最大利润
C++代码
class Solution {
public:int maxProfit(vector<int>& prices) {// 方法:一次遍历(动态规划)// 重点:让最大利润和最低购价一直更新int minPrice=INT_MAX,maxProfit=0;for(int i=0;i< prices.size();i++){maxProfit=max(maxProfit,prices[i]-minPrice);//最大利润看出售日价格-购入价格的差minPrice=min(minPrice,prices[i]);}return maxProfit;}
};
结算页面
这篇关于稀碎从零算法笔记Day7-LeetCode:买卖股票的最佳时机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!