一、问题描述
给定一个数组 prices,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
题目链接:买卖股票的最佳时机
二、题目要求
示例 :
输入: [7,1,5,3,6,4] 输出:5解释:在第2天(股票价格=1)的时候买入,在第5天(股票价格=6)的时候卖出. 最大利润=6-1=5。注意利润不能是7-1=6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
考察
动态规划中等题型 建议用时15~30min
三、问题分析
一开始,我想用双重for循环暴力法,看看能不能过,没想到力扣测试的数据量这么大,直接芭比Q!
毕竟是动态规划,还是老老实实用我们的三步走,老套路:
第一步 含义搞懂:
我们平时买股票是看不见股票如何变化的,现在给你每一天的价格,我们肯定希望在最低的时候买入,在最高点卖出了。
第二步 变量初始:
min=prices[0] max=0,最低价格为0
第三步 规律归纳:
定义双变量,min代表0~i-1区间的最低价格(买入),max代表第i天卖出获得的利润。
三步走,打完收工!
四、编码实现
classSolution { public: intmaxProfit(vector<int>&prices) { inti,n=prices.size(), ans=0,k=prices[0];//初始化数据for(i=1;i<n;i++)//循环判断 { ans=max(ans,prices[i]-k);//卖出k=min(k,prices[i]);//买入 } returnans;//输出结果 } };
五、测试结果