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