题目来源:
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
>>>