买卖股票的最佳时机(力扣简单题,动态规划,max(),min()函数应用)
题目:
给定一个数组 prices
,它的第 i
个元素 prices[i]
表示一支给定股票第 i
天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0
。
思路:
想法一:
- 因为要考虑买入卖出中间差最大,且买入卖出有先后顺序,因此不能单纯以最大最小值作参考。
- 要对每一个数进行讨论,但这样会使时间复杂度出奇的大。
- 因此我们选用动态规划,动态规划 :前i天的最大收益 = max
- 在使用动态规划过程中,我一开始选择创建一个最小值的方法,对每次前i个数进行排序,找到最小值,后来感觉T很大,放弃后使用flag变量标记前i个数最小值的下标,每增加一个数就与最小值进行比较。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int max = 0;
int flag = 0;
for(int i = 1;i < prices.size();i++){
if(prices[i] < prices[flag]){
flag = i;
}
if((prices[i] - prices[flag]) > max){
max = (prices[i] - prices[flag]);
}
}
return max;
}
};
想法二:
而官方给出的代码是:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int inf = 1e9;
int minprice = inf, maxprofit = 0;
for (int price: prices) {
maxprofit = max(maxprofit, price - minprice);
minprice = min(price, minprice);
}
return maxprofit;
}
};
作者:力扣官方题解
链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/solutions/136684/121-mai-mai-gu-piao-de-zui-jia-shi-ji-by-leetcode-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 其中1e9代表无穷。实际中遇到的一些问题,或者解决一些算法问题时,会遇到给某个变量初始化并赋值为1e9。接着后面会出现一些代码计算最小值。这时,1e9的作用是给变量赋一个初始极大值,原因在于后面的代码中需要取此变量和其他变量的最小值。初始化为一个最大值,亦即初始化为无穷,便于后面极小值的比较和获取,属于初始化的目的。
- 调用max函数可以直接计算二者最大值,min可以直接计算二者最小值。官方和我的思路差不多,不过实现形式简化了不少
分类:
力扣
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理