买卖股票的最佳时机

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

注意你不能在买入股票前卖出股票。

示例 1:

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

示例 2:

输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

分析

对于这道题,以普通人的思维来看,一般是对某个元素nums[i](作为买入),找后续最大的nums[j](作为卖出),记录二者的差值,差值最大即利润最大,但显然这样复杂度太高了。

于是我们可以反过来想,对某个元素nums[i](作为卖出),找前面最小的nums[j](作为买入),这样差值最大仍未利润最大。

但显然单单这样是不够的,我们需要做一下优化。我们可以维护一个min变量,记录遍历到元素i以前的最小数值,该数值作为买入,这样当我们遍历计算nums[i]-min的值时,可以保证在该处卖出时所付出的成本总是最低的。于是我们就只要维护min以及取nums[i]-min的最大值即可

代码

    class Solution {public int maxProfit(int[] prices) {int min = Integer.MAX_VALUE,profit = 0;for(int i =0;i<prices.length;i++){if(prices[i]<min) {min = prices[i];}if(profit<prices[i]-min){profit = prices[i]-min;}}return profit;}}

LeetCode 初级 - 买卖股票的最佳时机相关推荐

  1. LeetCode 188. 买卖股票的最佳时机 IV(动态规划)

    1. 题目 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意: 你不能同时参与多笔交易(你必须在再次购买 ...

  2. LeetCode 123. 买卖股票的最佳时机 III(动态规划)

    1. 题目 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意: 你不能同时参与多笔交易(你必须在再次购买 ...

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

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

  4. 【算法】贪心算法:LeetCode 714 买卖股票的最佳时机含手续费 、LeetCode 968 监控二叉树

    LeetCode 714 买卖股票的最佳时机含手续费 (中等) 题目 描述 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. 你 ...

  5. 【贪心算法】Leetcode 714. 买卖股票的最佳时机含手续费

    [贪心算法]Leetcode 714. 买卖股票的最佳时机含手续费 题目 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. ...

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

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

  7. 【LeetCode】买卖股票的最佳时机含手续费 [M](动态规划)

    714. 买卖股票的最佳时机含手续费 - 力扣(LeetCode) 一.题目 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用 ...

  8. Leetcode 188.买卖股票的最佳时机IV

    买卖股票的最佳时机IV 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意: 你不能同时参与多笔交易(你必 ...

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

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

最新文章

  1. c语言c++语言中静态变量,函数详解
  2. 十年沉浮,用Python看创业公司消亡史
  3. leetcode470 Java_Java实现 LeetCode 794 有效的井字游戏 (暴力分析)
  4. 谷歌浏览器没法安装插件,提示程序包无效
  5. jena dataset 增删改查
  6. .NET5全面拥抱Azure云,微软市值重回巅峰,那些年吹过的牛,都实现了!
  7. RESET MASTER和RESET SLAVE使用场景和说明【转】
  8. golang高并发的理解
  9. oracle监听的动态注册和静态注册
  10. Performance of Every Day Things by Jeffrey Richter PPT and Code
  11. esx4克隆后的处理工作
  12. 电子相册系统(六)相片列表显示
  13. [HDOJ5734]Acperience(数学,公式推导)
  14. java 调用python脚本的方法
  15. 电脑小技巧:怎么取消电脑开机密码
  16. Ribbon 界面介绍(1)
  17. html 数字大小写转换,数字大小写转化
  18. 北京最新城市总体规划草案
  19. notepad++设置背景颜色为豆沙绿
  20. 移动应用程序设计/开发:jQuery Mobile入门指南

热门文章

  1. Base64编码和其隐写术
  2. KNN实现小麦种子分类问题
  3. NUCLEO-STM32H7A3ZI-Q使用说明
  4. 【弄nèng - Activiti6】Activiti6入门篇(十五)—— 定时器中间事件
  5. Praat脚本-009 | 提取时长和基频
  6. 关于纸质书管理APP的测评
  7. [康宁]浅论亚里士多德对柏拉图“理念论”的批判与继承
  8. 什么因素让唐僧是一个领导,而孙悟空只是一个打工者呢?
  9. pktgen自动化测试网卡速率和包率
  10. 静物素描如何“鼓”起来,画出体积感?