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驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    zbb20181207 springboot @ConfigurationProperties使用
    zbb20181206 logback,lombok 默认日志logback配置解析
    Spring Boot (8) 全局异常处理
    Spring Boot (7) JdbcTemplate访问数据库
    Spring Boot (6) Spring Data JPA
    Spring Boot (4) 静态页面和Thymeleaf模板
    Spring Boot (3) 热部署devtools
    Spring Boot (2) Restful风格接口
    Spring Boot (1) 构建第一个Spring Boot工程
    idea使用maven搭建ssm框架实现登陆商品增删改查
  • 原文地址:https://www.cnblogs.com/itdef/p/14986486.html
Copyright © 2011-2022 走看看