zoukankan      html  css  js  c++  java
  • leetcode刷题-121-买卖股票的最佳时机

    问题描述

    给定一个数组,它的第 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。

    实现

    1 暴力破解

    将所有的利润可能算出,选择最大的利润返回

    时间复杂度O(n^2)

    def max_profit(nums):
        """
        暴力枚举
        没考虑输入数组为空 但是测试用例没有提出相关策略
        最大测试用例运行十七秒
        """
        nums_len = len(nums)
        print(nums_len)
        max_profit = 0
    
        for i in range(nums_len-1):
            for j in range(i+1, nums_len):
                if nums[j] > nums[i]:
                    current_profit = nums[j] - nums[i]
                    if max_profit < current_profit:
                        max_profit = current_profit
    
        return max_profit
    

    2 遍历一次

    最大利润一定在当前情况下的最小值(current_min_profit)与最大值(current_min_profit)的差值中,因此遍历数组,找出当前最小值(current_min_profit)与最大值(current_max_profit),计算差值并与当前最大利润作比较,当前最小值(current_min_profit)大于当前值时,当前最大值与当前最大值同时更新成当前元素,开始向后遍历并进行上述操作

    时间复杂度:O(n)

    def max_profit_o_n(nums):
        """
        当数据量为万级以上时,暴力破解方法使用时间过长
        当前最大值减去当前最小值即为当前情况下最大利润
        只遍历一遍即可
        时间复杂度O(n)
        """
        nums_len = len(nums)
        max_profit = 0
    
        if nums_len == 0:
            return max_profit
        else:
            current_max_value = nums[0]
            current_min_value = nums[0]
    
    
        for i in range(1, nums_len):
            if current_min_value > nums[i]:
                current_max_value = nums[i]
                current_min_value = nums[i]
            else:
                if current_max_value < nums[i]:
                    current_max_value = nums[i]
                    current_profit = current_max_value - current_min_value
                    if current_profit > max_profit:
                        max_profit = current_profit
    
        return max_profit
    
  • 相关阅读:
    PHP 大小写转换、首字母大写、每个单词首字母大写转换相关函数
    【论文学习4】BiSample: Bidirectional Sampling for Handling Missing Data with Local Differential Privacy
    【论文学习3】Local Differential Privacy for Deep Learning
    【论文学习2】 Differential Privacy Reinforcement Learning
    深度学习中的优化算法
    Spatial crowdsourcing
    “pip install tensorflow ”出现错误
    python或pip'不是内部或外部命令”
    pip install torch出现错误
    打不开gitHub的解决方法
  • 原文地址:https://www.cnblogs.com/liuheblog/p/12095617.html
Copyright © 2011-2022 走看看