• 【LeetCode-简单】121. 买卖股票的最佳时机(详解)


    题目

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

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

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

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock

    方法1:暴力循环(超时)

    作者:本人

    思路:

    从第一个数开始,为它寻找后面的数能与之作差的结果,找到最大的结果返回。

    1. class Solution {
    2. public int maxProfit(int[] prices) {
    3. int len = prices.length;
    4. int res = 0;
    5. for (int i = 0; i < len-1; i++) {
    6. int max = prices[i+1];
    7. for (int j = i+1; j < len; j++) {
    8. if (prices[j] > max){
    9. max = prices[j];
    10. }
    11. }
    12. res = max(res , max - prices[i]);
    13. }
    14. return res;
    15. }
    16. }

    方法2:一次遍历

    作者:力扣官方

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

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

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


    注意目前来说历史最低,不是数组中的最低

    有区别的:例如数组[ 2 , 99 , 1 , 10 ],数组中最低是“1”,那难道结果就是 在“1”买入,在“10”售出吗,那样只赚了10-1=9。

    当我们从左往右遍历数组的时候,当遍历到“99”时,此时“2”才是当前历史最低点,我们计算在“2”买入,在“99”售出,转的是99-2=97,将97暂时存下来,遍历到“10”时,当前历史最低是 “1”,我们算的赚10-1=9,再拿9与前面的97比较,我们选择利润大的。

    1. class Solution {
    2. public int maxProfit(int[] prices) {
    3. int len = prices.length;
    4. int minIndex = 0;
    5. int res = 0;
    6. for (int i = 1; i < len; i++) {
    7. if (prices[i] < prices[minIndex]){
    8. minIndex = i;
    9. }else res = Math.max(res , prices[i] - prices[minIndex]);
    10. }
    11. return res;
    12. }
    13. }

    这道题虽然是简答题,但如果想不到一次遍历的话,那还是很难的,有这个思路了,那就非常简单。 

  • 相关阅读:
    linux001--初次体验vmware虚拟机
    快收下这份照片模糊变清晰方法攻略
    【毕业设计】基于单片机的心率血氧健康监测手表 - 物联网 嵌入式
    神经网络参数相关性测试,神经网络是参数模型吗
    bat备份mssql数据库,可设置服务器 ip等相关信息,和备份路径
    Java21的虚拟线程Virtual Thread初体验
    spring boot 2.7 -> 3.0升级指南
    TypeScript入坑
    软件测试的就业前景到底怎么样?
    [C/C++]数据结构 深入挖掘环形链表问题
  • 原文地址:https://blog.csdn.net/KangYouWei6/article/details/127748421