ARTS 第 19 周

每周完成一个 ARTS:
Algorithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章


Contents:


Algorithm

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)。


Review

The Differences Between a Junior, Mid-Level, and Senior Developer

本周阅读了 Medium 上的一篇讲述初级、中级和高级开发者之间的区别的文章,The Differences Between a Junior, Mid-Level, and Senior Developer

本文就三者之间的区别以及如何进行跨越展开讨论:


Tips

Pandas 中的 groupby 函数

本周和大家分享 Pandas 中的一个常用且高效的函数,叫做 groupby()

顾名思义,「groupby」就是「按 XXX 进行分组」的意思。举个简单的例子,我们有如下所示的表,将其按照「A」进行分组,结果如右所示。

groupby 的功能大致来说有 split、apply 和 combine:

细节功能请见文档 https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html


Share

Share: Vim 中的文本对象

Vim 中有一个与「面向对象编程」比较相似的一个概念,就是「文本对象」,其实「文本对象」并没有那么的神秘,大概有以下几种:

配合几个常用的命令(command)就可以很快的对代码进行修改了:

另外还需要记住在选择文本对象时,i 和 a 这两个命令的区别:

常用的使用方法如下:

[number]<command>[text object]

示例: