LeetCode121. Best Time to Buy and Sell Stock-python(easy)

题目来源:

        https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/

题目分析:

       本题给定了一个数组,其中每个元素代表当天股票的价格。例如array[i]代表第i天股票的价格。现在需要我们找出哪一天买股票(第i天,j>i),哪一天卖股票(第j天),可以获得最大的收益。因此我们可以想到遍历该数组,每次将最小值存储起来,计算每天的利润,最后取利润的最大值。

实现代码:

class Solution:
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        if(len(prices)==0):
            return 0
        else:
            low_price=prices[0];profit=0;max_profit=0
            for price in prices:
                low_price=min(low_price,price)
                profit=price-low_price
                max_profit=max(max_profit,profit)
            return max_profit

其中,还有一种做法是这样的,它所耗费的时间较少。

class Solution:
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        if len(prices) < 2:
            return 0
        
        tv = prices
        profit, cs, ce = 0, 0, 0
        for i, t in enumerate(tv):
            if t < tv[cs]: cs = i
            if t > tv[ce]: ce = i
            
            if cs > ce: ce = cs
            
            if (tv[ce] - tv[cs]) > profit:
                profit = tv[ce] - tv[cs]

        return profit

  在这里,他用了一个enumerate函数。

描述

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

Python 2.3. 以上版本可用,2.6 添加 start 参数。

语法

以下是 enumerate() 方法的语法:

enumerate(sequence, [start=0])

参数

  • sequence -- 一个序列、迭代器或其他支持迭代对象。
  • start -- 下标起始位置。

返回值

返回 enumerate(枚举) 对象。


实例

以下展示了使用 enumerate() 方法的实例:

>>> seasons = [ ' Spring ' , ' Summer ' , ' Fall ' , ' Winter ' ] >>> list ( enumerate ( seasons ) ) [ ( 0 , ' Spring ' ) , ( 1 , ' Summer ' ) , ( 2 , ' Fall ' ) , ( 3 , ' Winter ' ) ] >>> list ( enumerate ( seasons , start = 1 ) ) # 小标从 1 开始 [ ( 1 , ' Spring ' ) , ( 2 , ' Summer ' ) , ( 3 , ' Fall ' ) , ( 4 , ' Winter ' ) ]

普通的 for 循环

>>> i = 0 >>> seq = [ ' one ' , ' two ' , ' three ' ] >>> for element in seq :... print i , seq [ i ] ... i += 1 ... 0 one 1 two 2 three

for 循环使用 enumerate

>>> seq = [ ' one ' , ' two ' , ' three ' ] >>> for i , element in enumerate ( seq ) :... print i , seq [ i ] ... 0 one 1 two 2 three >>>








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值