LeetCode 面试必备100题:Best Time to Buy and Sell Stock 买卖股票的最佳时机
Posted Linux猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 面试必备100题:Best Time to Buy and Sell Stock 买卖股票的最佳时机相关的知识,希望对你有一定的参考价值。
🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏:LeetCode面试必备100题(优质好文持续更新中……)🚀
目录
一、题意
股票价格存储到了一个数组 prices 中,其中 prices[i] 是股票在第 i 天的价格。希望通过选择某一天购买一只股票并选择未来的另一天出售该股票来获得最大化利润。如果可以,则输出获得的最大利润,如果无法获得任何利润,则返回 0。
限制条件:
1 <= prices.length <= 10^5
0 <= prices[i] <= 10^4
二、样例
1. 样例一
输入:prices = [7,1,5,3,6,4]
输出:5
在第 2 天买入(价格为 1),并在第 5 天卖出(价格为 6),利润为 6-1 = 5。
注意:不允许在第 2 天买入并在第 1 天卖出,必须先买入再卖出。
2. 样例二
输入:prices = [7,6,4,3,1]
输出:0
在上述情况下,无法获得任何利润,所以是0。
三、解题思路
依次遍历所有股票价格,使用 minProfit 记录之前最低的价格(注意:初始化为最大值),每次与当前价格做差价得到利润,每次更新最大利润 maxProfit,直到遍历完所有价格。
四、代码实现
class Solution {
public:
int maxProfit(vector<int>& prices) {
int maxProfit = 0, minPrice = 1e4+5; //初始化一个最大值
for (int price : prices) {
minPrice = min(minPrice, price); //计算最小价格
maxProfit = max(maxProfit, price - minPrice); //更新最大利润
}
return maxProfit;
}
};
上述代码中,1e4 + 5 代表 10^4 + 5,因为求的是最低价格,所以先初始化一个最大值(数组中最大值为10^4),每次更新最大利润 maxProfit。
五、题目链接
Best Time to Buy and Sell Stock
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
以上是关于LeetCode 面试必备100题:Best Time to Buy and Sell Stock 买卖股票的最佳时机的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 面试必备100题:Climbing Stairs 爬楼梯的方法
LeetCode 面试必备100题:Add Two Numbers 两数相加
LeetCode面试必备100题:3Sum 数组中查找三个和为零的数
LeetCode 面试必备100题:无重复字符的最长子串 Longest Substring Without Repeating Characters