开源地址:点击该链接


题目描述

  1. * https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock
  2. * 题目描述:
  3. * 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格
  4. * 如果你最多只允许完成一笔交易(即买入和卖出一支股票)
  5. * 设计一个算法来计算你所能获取的最大利润
  6. * 注意你不能在买入股票前卖出股票
  7. *
  8. * 示例 1:
  9. * 输入: [7,1,5,3,6,4]
  10. * 输出: 5
  11. * 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6
  12. * 的时候卖出,最大利润 = 6-1 = 5
  13. * 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格
  14. *
  15. * 示例 2:
  16. * 输入: [7,6,4,3,1]
  17. * 输出: 0
  18. * 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0

解题思路

  1. * 解题思路:
  2. * 首先遍历数组是从左往右的,即先买入后卖出的顺序
  3. * 然后对每一个价格首先判断是否是小于当前最小值
  4. * 即判断当前价格是否适合卖出,如果不小于,则适合卖出
  5. * 然后检查是否产生了最大效益
  6. * 如果小于,即产生了新的最小值,则更新最小值即可
  7. *
  8. * 另一种解题思路:
  9. * 详情请参考:https://leetcode-cn.com/problems/
  10. * best-time-to-buy-and-sell-stock/solution/
  11. * 121-mai-mai-gu-piao-de-zui-jia-shi-ji-dp-7-xing-ji/
  12. * 该方法的核心思想是
  13. * 区间和可以转换成求差的问题,求差问题,也可以转换成区间和的问题
  14. * 所以该问题就可以转化为最大连续子区间和的问题
  15. *
  16. * 可能的疑问:
  17. * 为什么当前的最小值一定比后边的某个较小值和一个较大值
  18. * 产生的利润更大,这是因为如果某个较小值能和后边的
  19. * 一个较大值产生利润,那么当前的最小值产生的利润一定
  20. * 比这个较小值更大

示例代码

  1. /* 第一种解题思路 */
  2. class Solution_1 {
  3. public:
  4. int maxProfit(vector<int>& prices) {
  5. int min = INT_MAX;
  6. int max = 0;
  7. for (int i=0; i<prices.size(); i++) {
  8. if (min > prices[i])
  9. min = prices[i];
  10. else if (prices[i] - min > max)
  11. max = prices[i] - min;
  12. }
  13. return max;
  14. }
  15. };
  16. /* 问题转化为最大连续子数组的和 */
  17. class Solution_2 {
  18. public:
  19. int maxProfit(vector<int>& prices) {
  20. int min = INT_MAX;
  21. int max = 0, sum = 0;
  22. for (int i=1; i<prices.size(); i++) {
  23. if (sum < 0) {
  24. sum = prices[i] - prices[i-1];
  25. } else {
  26. sum += (prices[i] - prices[i-1]);
  27. }
  28. if (sum > max)
  29. max = sum;
  30. }
  31. return max;
  32. }
  33. };

往期推荐

【每天一题】LeetCode 121. 买卖股票的最佳时机的更多相关文章

  1. 每日一题-——LeetCode(121)买卖股票的最佳时机

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

  2. Java实现 LeetCode 121 买卖股票的最佳时机

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

  3. Leetcode——121. 买卖股票的最佳时机

    题目描述:买卖股票的最佳时机 题目要求求解能获得最大利润的方式? 可以定一个二维数组 d [ len ] [ 2 ] ,其中d[ i ][ 0 ] 表示前i天可以获得的最大利润:d[ i ][ 1 ] ...

  4. [LeetCode] 121. 买卖股票的最佳时机 ☆(动态规划)

    https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/solution/xiang-xi-tong-su-de-si-lu- ...

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

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

  6. leetcode 121. 买卖股票的最佳时机 JAVA

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

  7. leetcode 121买卖股票的最佳时机I

    从下标1开始,维护两个变量,一个是0~i-1中的最低价格low,一个是当前的最高利润res;先更新最高利润,在更新最低价格:应用了贪心算法的基本思想,总是选择买入价格最低的股票,代码如下: 具有最优子 ...

  8. Leetcode之动态规划(DP)专题-121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock)

    Leetcode之动态规划(DP)专题-121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock) 股票问题: 121. 买卖股票的最佳时机 122. 买卖股票的最 ...

  9. LeetCode《买卖股票的最佳时机》系列题目,最详解

    目录 说在前面 引例:只能交易一次 一.动态数组定义 二.状态转移方程 三.初始化 四.优化 无限制买卖 一.动态数组定义 二.状态转移方程 三.初始化 四.优化 交易 2 次,最大利润? 一.动态数 ...

随机推荐

  1. 图解 Spring:HTTP 请求的处理流程与机制【4】

    4. HTTP 请求在 Spring 框架中的处理流程 在穿越了 Web 容器和 Web 应用之后,HTTP 请求将被投送到 Spring 框架,我们继续剖析后续流程.Web 应用与 Spring M ...

  2. scrapy知识补充--scrapy shell 及Spider

    什么是scrapy shell? Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试xpath或css表达是,来查看他们的工作方式,方便爬取页面中的数据 ...

  3. Python编译升级

    [root@localhost python]# tar xvf Python-3.6.9.tgz [root@localhost python]# cd Python-3.6.9/ [root@lo ...

  4. mysql的事物,外键,与常用引擎

    ### part1 时间类型 date YYYY-MM-DD 年月日 (出现日期) time HH:MM:SS 时分秒 (竞赛时间) year YYYY 年份值 (红酒年份 82年矿泉水) datet ...

  5. Stream系列(十二) PartitioningBy方法使用

    分割列表 视频讲解: https://www.bilibili.com/video/av78106120/ EmployeeTestCase.java package com.example.demo ...

  6. Xtrabackup 增量备份 和 增量还原

    目录 测试数据准备 进行全量备份 第一次增量插入一条数据 进行第一次增量备份 注意 第二次增量插入一条数据 进行第二次增量备份 注意 查看xtrabackup_binlog_info中的binlog位 ...

  7. jQuery上拉加载更多

    <header id="header">首 页</header> <section id="main"> <ul id ...

  8. Spring IOC容器装配Bean_基于XML配置方式

    开发所需jar包 实例化Bean的四种方式 1.无参数构造器 (最常用) <?xml version="1.0" encoding="UTF-8"?> ...

  9. 理解Redis的单线程模式

    0.概述 本文基于的Redis版本为4.0以下,在Redis更高版本中并不是完全的单线程了,增加了BIO线程,本文主要讲述主工作线程的单线程模式. 通过本文将了解到以下内容: Redis服务器采用单线 ...

  10. tp5引用第三方类vendor或extend(多种方法)

    extend 方法一:命名空间引入 我们只需要把自己的类库包目录放入EXTEND_PATH目录(默认为extend,可配置),就可以自动注册对应的命名空间,例如: 我们在extend目录下面新增一个l ...