python 买卖股票的最佳时机 LeetCode No.122
解法:
一、暴力解法
二、贪心算法:由于不限制买卖次数,也没有交易费用,就可以是用贪心算法。思路:只要第二天比前一天高,我们就买进,第二天卖掉,就可以赚钱。
三、动态规划:根据算法导论这本最权威的书(最难读的一本书)中提到动态规划的四个步骤,第一刻画一个最优解的结构特征,第二递归地定义最优解的值,第三计算最优解的值,通常采用自低向上的方法,第四计算出的信息构造一个最优解(如最长公共子序列中,求出最长的子序列的其中一种组合)想了解的可以看我之前的关于动态规划的文章资料动态规划,回到这一题,找到递推公式是最重要的,也就是第二步,dp[i] = dp[i-1] if prices[i]<=prices[i-1] else dp[i-1]+(prices[i]-prices[i-1]),看起来和贪心算法的思路类似,但是如果加上别的限制条件,贪心算法就不再实用。(ps,下面那个动态规划的代码是leetcode上面的,然后我发现,和我自己写的惊人的相似,哈哈哈笑死了。)
class
Solution
:
def
maxProfit
(
self
,
prices
:
List
[
int
]
)
-
>
int
:
# dp[i] = dp[i-1] if prices[i]<=prices[i-1] else dp[i-1]+(prices[i]-prices[i-1])
res
=
0
for
i
in
range
(
1
,
len
(
prices
)
)
:
if
prices
[
i
]
>
prices
[
i
-
1
]
:
res
+=
(
prices
[
i
]
-
prices
[
i
-
1
]
)
return
res
class
Solution
(
object
)
:
def
maxProfit
(
self
,
prices
)
:
"""
:type prices: List[int]
:rtype: int
"""
money
=
0
for
i
in
range
(
1
,
len
(
prices
)
)
:
if
prices
[
i
-
1
]
<
prices
[
i
]
:
money
+=
prices
[
i
]
-
prices
[
i
-
1
]
return
money