注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数

题目描述

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。


输入示例

输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。

解题思路

1、暴力破解法(会超时,仅供提供思路)

使用一个变量记录最大差值,然后对于数组中的每一个元素,都去和后面的元素依次做减法(后面的减去当前的),并随时更新最大差值。时间复杂度为O(n2)O(n^2)O(n2)

var maxProfit = function(prices) {let result = 0for(let i = 0, len = prices.length; i < len; i++){for(let j = i + 1; j < len; j ++){result = result > prices[j] - prices[i] ? result : prices[j] - prices[i]}}return result
}

2、双指针法

使用一个变量记录最大差值,记为max。遍历数组,使用一个变量记录当前数组之前的最小值,变量记为min(注:这个变量应该在遍历之前和max一起定义,此处是为了方面解释,所以在这里提及)。如果当前元素小于min,则更新min,与此同时保持对max的更新。时间复杂度为O(n)O(n)O(n)

var maxProfit = function(prices) {// 初始化最小值let min = prices[0]// 初始化最大差值let result = 0for (var i = 0; i < prices.length; i++) {// 更新最大差值if (prices[i] - min > result) result = prices[i] - min// 当前元素若小于 min,则更新if (prices[i] < min) min = prices[i]}return result
}

力扣题目——121. 买卖股票的最佳时机相关推荐

  1. 力扣:121. 买卖股票的最佳时机 题解

    力扣:121. 买卖股票的最佳时机 1 题目描述 2 题解 1 题目描述 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择 某一天 ...

  2. 力扣刷题day42|121买卖股票的最佳时机、122买卖股票的最佳时机II

    文章目录 121. 买卖股票的最佳时机 贪心思路 动态规划思路 动态规划五部曲 122. 买卖股票的最佳时机II 贪心思路 动态规划思路 动态规划五部曲 121. 买卖股票的最佳时机 力扣题目链接 给 ...

  3. 力扣leetcode之Java刷题121买卖股票的最佳时机

    121. 买卖股票的最佳时机 题目:   给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格.   你只能选择某一天买入这只股票,并选择在未来的某一 ...

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

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

  5. 《LeetCode刷题》—121. 买卖股票的最佳时机

    <LeetCode刷题>-121. 买卖股票的最佳时机 一.题目内容 原题连接:https://leetcode.cn/problems/best-time-to-buy-and-sell ...

  6. (C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #121. 买卖股票的最佳时机

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

  7. 力扣-309最佳买卖股票时机含冷冻期(dp)

    力扣-309最佳买卖股票时机含冷冻期 1.题目 309. 最佳买卖股票时机含冷冻期 给定一个整数数组prices,其中第 prices[i] 表示第i天的股票价格 . 设计一个算法计算出最大利润.在满 ...

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

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

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

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

最新文章

  1. 如何识别未使用的CSS定义[关闭]
  2. 背景建模与前景检测3(Background Generation And Foreground Detection Phase 3)
  3. C#中写简单的COM+组件
  4. mac安装nvm及换源及node安装切换
  5. Per-Title编码优化
  6. 一个程序员必须学会的Github使用技巧
  7. 《C++ Primer 第五版》第二章(1-4小节)------基本内置类型,初始化和赋值及声明和定义,指针和引用,const和constexpr
  8. 《关于我的那些面经》——百度后端(附答案)
  9. 工期日历天计算器_天津实地告诉你:房建项目是怎样保节点,抢工期的?
  10. C#中IEnumerableT.Aggregate()的简单使用
  11. matlab 刻度间隔,matlab – 地图的主要和次要刻度?
  12. asp.net 获取客户端cookie_开发中你一定碰到过的cookie和session问题,今天一并帮你解决!...
  13. MATLAB读取和写入Excel文件
  14. Windows C盘格式化或者同平台迁移oracle数据库
  15. DWR怎么调用java的方法_在DWR中实现直接获取一个JAVA类的返回值的两种方法
  16. JAVA反射--通过反射对pojo进行UT覆盖率测试
  17. 阿里云mysql导出表,mysql导出数据库表数据
  18. 程序员需要未雨绸缪,搞点副业,别把鸡蛋放在一个篮子里,要不然真的很危险
  19. day030进程的两种创建方法,验证进程的空间隔离,join等待子进程
  20. 企业微信小程序获取手机号?

热门文章

  1. Self-Supervised Curriculum Learning for Spelling Error Correction
  2. TensorFlow:判断CUDA和GPU是否可用
  3. java 同步原语_你所不知道的有关Java 和Scala中的同步问题
  4. HTML5 Canvas中实现文字链接
  5. 和孩子们一起学Python编程
  6. HTML5开源RPG游戏引擎lufylegendRPG 0.1发布
  7. listview 中内容覆盖了屏幕底部的工具栏的解决办法
  8. Mysql Sql语句令某字段值等于原值加上一个字符串
  9. 贪吃蛇系列之七——有吃的啦
  10. 如何开具和交付给客户电子发票