zoukankan      html  css  js  c++  java
  • Leetcode 121 买卖股票的最佳时机

    地址 https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/

    给定一个数组 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。
     
    
    提示:
    1 <= prices.length <= 105
    0 <= prices[i] <= 104
    

    解答
    看到本题的题意后,第一想法就是遍历数组,将记录的最小最大值与当前遍历数值比较,计算差价,得到最大差价。
    但是由于股票买卖的要求是低买高卖,我们只需要将当前遍历的数值与记录的最小值比较计算差价即可。
    股票不需要高买更高的价格卖 或者高买低价买。所以记录之前的最大值与当前的数值比较没有意义。
    所以我们只需要记录之前的最小值,将记录的最小值与当前遍历数值比较,计算差价,得到最大差价。
    image
    代码

    class Solution {
    public:
    	int minVal; int maxVal;
    	int maxProfit(vector<int>& prices) {
    		minVal = prices[0];
    		int ans = 0;
    		for (int i = 1; i < prices.size(); i++) {
    			ans = max(ans, prices[i] - minVal);
    			minVal = min(prices[i], minVal);
    		}
    
    		return ans;
    	}
    };
    

    我的视频题解空间

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    时间等待太重要!!!
    (引用 )自动化测试报告HTMLtestrunner
    (转载)selenium-webdriver(python)
    lr_convert_string_encoding()转码函数
    分步骤学习自动化测试
    (引用)web安全测试
    Monkey测试
    (学习网址)Python 自动化测试
    (引用) unittest测试驱动之执行测试(三)
    log4net日志组件
  • 原文地址:https://www.cnblogs.com/itdef/p/14986486.html
Copyright © 2011-2022 走看看