题目

给定一个数组,它的第 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)级别,因为只用了maxprofit两个变量。


最大最小思想

算法

图源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.买卖股票的最佳时机相关推荐

  1. LeetCode #121 买卖股票的最佳时机 贪心 单调栈 动态规划

    LeetCode #121 买卖股票的最佳时机 题目描述 给定一个数组,它的第 iii 个元素是一支给定股票第 iii 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算 ...

  2. leetcode - 121.买卖股票的最佳时机

    121.买卖股票的最佳时机 ------------------------------------------ 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成 ...

  3. LeetCode - 121. 买卖股票的最佳时机

    121. 买卖股票的最佳时机 class Solution {public int maxProfit(int[] prices) {if (prices == null || prices.leng ...

  4. LeetCode 121:买卖股票的最佳时机 思考分析

    题目描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润. 注意:你不能在买入股票 ...

  5. leetcode.121. 买卖股票的最佳时机(best-time-to-buy-and-sell-stock)

    文章目录 121. 买卖股票的最佳时机 代码与思路 暴力法 一次遍历 单调栈 122. 买卖股票的最佳时机 II 代码与思路 股票问题系列通解 121. 买卖股票的最佳时机 给定一个数组,它的第 i ...

  6. 105. Leetcode 121. 买卖股票的最佳时机 (动态规划-股票交易)

    给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票.设计一个算法来 ...

  7. leetcode 121. 买卖股票的最佳时机 (贪心 + 动规 + 双指针

    贪心的思路: 得到最小值,再挨个用数组中的值减去最小值,最终值取一个最大的 class Solution { public:int maxProfit(vector<int>& p ...

  8. LeetCode: 121. 买卖股票的最佳时机(C++)

    题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票 ...

  9. 158. Leetcode 121. 买卖股票的最佳时机 (贪心算法-股票题目)

    class Solution:def maxProfit(self, prices: List[int]) -> int:low, max_profit = float("inf&qu ...

  10. LeetCode 121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock)

    简单粗暴的第一种解法: class Solution { public:int maxProfit(vector<int>& prices) {int m = prices.siz ...

最新文章

  1. python中 doc_python中doc转pdf
  2. php 格式化评论量函数,深入剖析PHP中printf()函数格式化使用
  3. leetcode day2 -- Sort List Insertion Sort List
  4. 牛客多校 - Minimum-cost Flow(最小费用最大流+贪心)
  5. java实现顺序栈_Java实现顺序栈原理解析
  6. 十六个字 一辈子学不完
  7. 优秀程序员必备素质——快速调试
  8. ALBERT、XLNet,NLP技术发展太快,如何才能跟得上节奏?
  9. css 解析 开源库_干货 | python库大全,全面高效
  10. 使用Dockerfile为SpringBoot应用构建Docker镜像
  11. 狭义相对论的一点点理解
  12. 联想网络同传的工作日志
  13. MAC 浏览器长截屏 滚动截屏
  14. 优惠券如何引流,如何做好优惠券推广,优惠券正确引流方法
  15. 浅谈 malloc 函数在单片机上的应用
  16. 个人成长语录——我愿永远做一个上进的少年,一个敢于拼搏的人
  17. i++、i--与++i、--i的区别
  18. 软考十大管理流程图知识点整理
  19. Micro SD 卡(TF卡) spi 模式实现方法
  20. 【图像增强】基于matlab萤火虫算法图像对比度增强【含Matlab源码 2142期】

热门文章

  1. vivado如何实现增量编译,加快布局布线
  2. 电子对抗中DRFM的基本原理
  3. python map()函数
  4. SVN建立分支和合并代码
  5. 掌握这些技巧助你轻松绘制程序流程图
  6. CoolPad backdoor CoolReaper
  7. 谁动了我的内存之PHP内存溢出
  8. WinForm 实现两个容器之间控件的拖动及排列(图文)
  9. SDRAM 相关资料
  10. 基于SSH实现模特人才招聘网站