每周完成一个 ARTS:
Algorithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章
groupby
函数121. Best Time to Buy and Sell Stock
题目:121. Best Time to Buy and Sell Stock
难度:Easy
题意:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。
示例 1:
Input: [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.
Not 7-1 = 6, as selling price needs to be larger than buying price.
示例 2:
Input: [7,6,4,3,1]
Output: 0
Explanation: In this case, no transaction is done, i.e. max profit = 0.
解法:
这道题的解法非常直接,只要遍历循环完所有的价格,然后将每一天的价格与之前存储的最低价格比较,选出这两者之间的较低价格作为最低价格,再计算当天价格与最低价格之差,将这个差与之前存储的最大利润相比较,选出两者之间的最大值,当遍历完成之后,最大利润也就找到了。
代码:
class Solution:
def maxProfit(self, prices: List[int]) -> int:
max_profit, min_price = 0, float('inf')
for i in prices:
min_price = i if i < min_price else min_price
max_profit = (i - min_price) if max_profit < (i - min_price) else max_profit
return max_profit
时间复杂度 O(n),空间复杂度 O(1)。
The Differences Between a Junior, Mid-Level, and Senior Developer
本周阅读了 Medium 上的一篇讲述初级、中级和高级开发者之间的区别的文章,The Differences Between a Junior, Mid-Level, and Senior Developer。
本文就三者之间的区别以及如何进行跨越展开讨论:
Pandas 中的 groupby
函数
本周和大家分享 Pandas 中的一个常用且高效的函数,叫做 groupby()
。
顾名思义,「groupby」就是「按 XXX 进行分组」的意思。举个简单的例子,我们有如下所示的表,将其按照「A」进行分组,结果如右所示。
groupby
的功能大致来说有 split、apply 和 combine:
细节功能请见文档 https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html。
Share: Vim 中的文本对象
Vim 中有一个与「面向对象编程」比较相似的一个概念,就是「文本对象」,其实「文本对象」并没有那么的神秘,大概有以下几种:
配合几个常用的命令(command)就可以很快的对代码进行修改了:
另外还需要记住在选择文本对象时,i 和 a 这两个命令的区别:
常用的使用方法如下:
[number]<command>[text object]
示例:
viw
:选择光标当前所在的单词vaw
:选择光标当前所在的单词以及其后面的空格ci"
:删除双引号内部的文字并进入插入模式ya{
:复制光标所在的大括号内部的所有内容到剪贴板(包括大括号 {
)