【LeetCode】121.买卖股票的最佳时机
题目
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。
题解
方法1:普通暴力遍历
算法
普通暴力遍历即每个人都能想到的方法,即每一对每一对的去遍历比较,遇到比max
还大的就更新max
。
代码
class Solution {public:int maxProfit(vector<int>& prices) {if (prices.size() == 0)return 0;int max = 0;for (int i = 0; i < prices.size() - 1; i++) {for (int j = i + 1; j < prices.size(); j++) {int profit = prices[j] - prices[i];if (profit > max) {max = profit;}}}return max;}
};
分析
时间复杂度:O(n2)级别,循环n(n−1)2\frac {n(n-1)}{2}2n(n−1)次。LeetCode排名战胜15%提交。
空间复杂度:O(1)级别,因为只用了max
和profit
两个变量。
最大最小思想
算法
图源LeetCode官方题解
如果把输入的数组画成一个折线图,如上图所示,就可以看出,这个问题实际上是求数组当最小值在最大值的前头的时候
,最小值与最大值之差
的最大。
也就是说,对折线上的每一个点i
,求出点i
之前的最小值min
,求出点i
之后的最大值max
,并得出差值profit = max - min
,最后再得出总的最大profit
就是题解了。
代码
class Solution {public:int maxProfit(vector<int>& prices) {if (prices.size() == 0)return 0;int maxProfit = 0;int minPrice = prices[0];for (const auto& price : prices) {if (price < minPrice)minPrice = price;int profit = price - minPrice;if (profit > maxProfit)maxProfit = profit;}return maxProfit;}
};
分析
只需要循环一次,所以时间复杂度O(n),LeetCode排名战胜98%提交。
只用到三个变量,所以空间复杂度O(1)。
【LeetCode】121.买卖股票的最佳时机相关推荐
- LeetCode #121 买卖股票的最佳时机 贪心 单调栈 动态规划
LeetCode #121 买卖股票的最佳时机 题目描述 给定一个数组,它的第 iii 个元素是一支给定股票第 iii 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算 ...
- leetcode - 121.买卖股票的最佳时机
121.买卖股票的最佳时机 ------------------------------------------ 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成 ...
- LeetCode - 121. 买卖股票的最佳时机
121. 买卖股票的最佳时机 class Solution {public int maxProfit(int[] prices) {if (prices == null || prices.leng ...
- LeetCode 121:买卖股票的最佳时机 思考分析
题目描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润. 注意:你不能在买入股票 ...
- leetcode.121. 买卖股票的最佳时机(best-time-to-buy-and-sell-stock)
文章目录 121. 买卖股票的最佳时机 代码与思路 暴力法 一次遍历 单调栈 122. 买卖股票的最佳时机 II 代码与思路 股票问题系列通解 121. 买卖股票的最佳时机 给定一个数组,它的第 i ...
- 105. Leetcode 121. 买卖股票的最佳时机 (动态规划-股票交易)
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票.设计一个算法来 ...
- leetcode 121. 买卖股票的最佳时机 (贪心 + 动规 + 双指针
贪心的思路: 得到最小值,再挨个用数组中的值减去最小值,最终值取一个最大的 class Solution { public:int maxProfit(vector<int>& p ...
- LeetCode: 121. 买卖股票的最佳时机(C++)
题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票 ...
- 158. Leetcode 121. 买卖股票的最佳时机 (贪心算法-股票题目)
class Solution:def maxProfit(self, prices: List[int]) -> int:low, max_profit = float("inf&qu ...
- LeetCode 121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock)
简单粗暴的第一种解法: class Solution { public:int maxProfit(vector<int>& prices) {int m = prices.siz ...
最新文章
- python中 doc_python中doc转pdf
- php 格式化评论量函数,深入剖析PHP中printf()函数格式化使用
- leetcode day2 -- Sort List Insertion Sort List
- 牛客多校 - Minimum-cost Flow(最小费用最大流+贪心)
- java实现顺序栈_Java实现顺序栈原理解析
- 十六个字 一辈子学不完
- 优秀程序员必备素质——快速调试
- ALBERT、XLNet,NLP技术发展太快,如何才能跟得上节奏?
- css 解析 开源库_干货 | python库大全,全面高效
- 使用Dockerfile为SpringBoot应用构建Docker镜像
- 狭义相对论的一点点理解
- 联想网络同传的工作日志
- MAC 浏览器长截屏 滚动截屏
- 优惠券如何引流,如何做好优惠券推广,优惠券正确引流方法
- 浅谈 malloc 函数在单片机上的应用
- 个人成长语录——我愿永远做一个上进的少年,一个敢于拼搏的人
- i++、i--与++i、--i的区别
- 软考十大管理流程图知识点整理
- Micro SD 卡(TF卡) spi 模式实现方法
- 【图像增强】基于matlab萤火虫算法图像对比度增强【含Matlab源码 2142期】