LeedCode两周刷完数据结构

  • 一、121. 买卖股票的最佳时机(Java语言实现)
    • 题目描述
    • 推荐方法:DP思想
    • 进阶方法:一次遍历
    • 复杂度
    • 结果

一、121. 买卖股票的最佳时机(Java语言实现)

题目描述

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

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

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

示例 1:

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

示例 2:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

推荐方法:DP思想

思路还是挺清晰的,还是DP思想:

记录【今天之前买入的最小值】
计算【今天之前最小值买入,今天卖出的获利】,也即【今天卖出的最大获利】
比较【每天的最大获利】,取最大值即可

 public int maxProfit(int[] prices) {if(prices.length <= 1)return 0;int min = prices[0], max = 0;for(int i = 1; i < prices.length; i++) {max = Math.max(max, prices[i] - min);min = Math.min(min, prices[i]);}return max;}

进阶方法:一次遍历

一次遍历算法

假设给定的数组为:[7, 1, 5, 3, 6, 4]

如果我们在图表上绘制给定数组中的数字,我们将会得到:

我们来假设自己来购买股票。随着时间的推移,每天我们都可以选择出售股票与否。那么,假设在第 i 天,如果我们要在今天卖股票,那么我们能赚多少钱呢?

显然,如果我们真的在买卖股票,我们肯定会想:如果我是在历史最低点买的股票就好了!太好了,在题目中,我们只要用一个变量记录一个历史最低价格 minprice,我们就可以假设自己的股票是在那天买的。那么我们在第 i 天卖出股票能得到的利润就是 prices[i] - minprice。

因此,我们只需要遍历价格数组一遍,记录历史最低点,然后在每一天考虑这么一个问题:如果我是在历史最低点买进的,那么我今天卖出能赚多少钱?当考虑完所有天数之时,我们就得到了最好的答案。

public class Solution {public int maxProfit(int prices[]) {int minprice = Integer.MAX_VALUE;int maxprofit = 0;for (int i = 0; i < prices.length; i++) {if (prices[i] < minprice) {minprice = prices[i];} else if (prices[i] - minprice > maxprofit) {maxprofit = prices[i] - minprice;}}return maxprofit;}
}

复杂度

  • 复杂度分析

  • 时间复杂度:O(n),只需要遍历一次。

  • 空间复杂度:O(1),只使用了常数个变量。

结果

方法一:
方法二:

LeedCode121. 买卖股票的最佳时机(Java语言实现)相关推荐

  1. 《LeetCode力扣练习》第121题 买卖股票的最佳时机 Java

    <LeetCode力扣练习>第121题 买卖股票的最佳时机 Java 一.资源 题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价 ...

  2. 炒股Java_基于java计算买卖股票的最佳时机

    这篇文章主要介绍了基于java计算买卖股票的最佳时机,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题: 可以将问题转化为如下图所示,即求多个累计 ...

  3. [LeetCode刷题笔记]714 - 买卖股票的最佳时机含手续费(C++/Python3/Java/动态规划/贪心)

    一.题目描述 给定一个整数数组 prices 和 整数 fee ,其中 prices[i] 表示第 i 天的股票价格,fee 代表了交易股票的手续费用. 你可以无限次地完成交易,但是你每笔交易都需要付 ...

  4. 买卖股票的最佳时机(Java)

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

  5. JAVA刷Leecode-贪心算法-区间问题-买卖股票的最佳时机 II

    JAVA刷Leecode-贪心算法 算法思想 区间问题-买卖股票的最佳时机 II(122.,easy) 题目描述 输入输出样例 示例1 示例 2: 解题思路: 题解 解题思路:贪心算法 题解 资源学习 ...

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

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

  7. 【LeetCode每日一题】——714.买卖股票的最佳时机含手续费

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[解题思路] 七[题目提示] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 贪心算法 二[ ...

  8. 20190808:买卖股票的最佳时机

    买卖股票的最佳时机 买卖股票的最佳时机 大致思路 代码实现 买卖股票的最佳时机 力扣简单习题1: 力扣简单习题2: 大致思路 两题的区别是,第一题只进行一次交易,第二题可以多次交易 第一题:遍历时随时 ...

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

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

最新文章

  1. cv2.threshold() 阈值:使用Python,OpenCV进行简单的图像分割
  2. 部署 SCCM 2012R2之三:系统准备篇
  3. html页面转换成pdf
  4. 直播协议HLS技术要点分析:分段生成与m2u8文件
  5. c++ float 转string
  6. Python面试总结(四)ip正则与三次握手四次挥手
  7. Problem G: C语言习题 医生值班
  8. 优酷视频手机上能发现投屏设备,但投屏失败?
  9. Python中groupby的简单使用
  10. php安装了openssl扩展,php如何安装openssl扩展?
  11. 光孝寺招聘员工!月薪15000,早九晚五,免费饭菜,有证者优先,工作六根清净,而且.......
  12. ESG供应链(ERP实施顾问必备知识)
  13. Cross Apply 与 Outer Apply 的区别
  14. U盘格式化后容量变小了_内存丢失如何恢复?
  15. 双十一全零售领域狂欢 请了明星代言商家真的能赚到钱吗?
  16. python爬虫之入门级实战实例(东方财富人气top100、汉服荟视频下载)
  17. 以太网已连接却无法联网的解决记录
  18. 通用的综合大数据数据可视化展示html页面源码
  19. 适用于高级别自动驾驶的驾驶员可预见误用仿真测试
  20. CSS超链接样式,去除下划线等

热门文章

  1. Java程序员如何查看本机连接过的 WiFi 和密码
  2. 1391586-30-3,Fmoc-p-azido-D-Phe-OH,4-Azido-N-Fmoc-D-phenylalanine分子式是C24H20N4O4
  3. C# 自动出题算术训练
  4. Facebook广告数据
  5. 通达OA二次开发之ERP对接
  6. c++第3次上机实验 项目1:个人所得税计算器
  7. html5 星空扩散效果,HTML5 canvas实现炫酷旋转银河系星空背景特效解析
  8. 在github开源代码添加MIT
  9. 基于Python+SQLite实现校园信息化统计平台【100010095】
  10. 微信营销十(微信公众号排版技巧)