Algorithm
本周选择的算法题是:Best Time to Buy and Sell Stock II
规则如下:
Say you have an array prices
for which the ith element is the price of a given stock on day i.
Design an algorithm to find the maximum profit. You may complete as many transactions as you like (i.e., buy one and sell one share of the stock multiple times).
Note: You may not engage in multiple transactions at the same time (i.e., you must sell the stock before you buy again).
Example 1:
Input: [7,1,5,3,6,4]
Output: 7
Explanation: Buy on day 2 (price = 1) and sell on day 3 (price = 5), profit = 5-1 = 4.
Then buy on day 4 (price = 3) and sell on day 5 (price = 6), profit = 6-3 = 3.
Example 2:
Input: [1,2,3,4,5]
Output: 4
Explanation: Buy on day 1 (price = 1) and sell on day 5 (price = 5), profit = 5-1 = 4.
Note that you cannot buy on day 1, buy on day 2 and sell them later, as you are
engaging multiple transactions at the same time. You must sell before buying again.
Example 3:
Input: [7,6,4,3,1]
Output: 0
Explanation: In this case, no transaction is done, i.e. max profit = 0.
Constraints:
1 <= prices.length <= 3 * 10 ^ 4
0 <= prices[i] <= 10 ^ 4
Solution
Runtime:60 ms,快过 78.99%。
Memory:15 MB,低于 78%。
class Solution:
def maxProfit(self, prices: List[int]) -> int:
profit = 0
for i in range(1, len(prices)):
diff = prices[i] - prices[i-1]
if diff > 0: profit += diff
return profit
Review
大神 Mike Ash 在文章里展示了如何构建一个轻量的 dispatch_queue,涉及到很多细节+思考点,值得一看。
Tip
CommonJS 模块特点:
- 所有代码都运行在模块作用域,不会污染全局作用域
- 独立性是模块的重要特点,模块内部最好不与程序的其他部分直接交互
- 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果,要想让模块再次运行,必须先清除缓存
- 模块加载的顺序,按照其在代码中出现的顺序
Share
关于 VIPER 的一次完整实践,内容很细。