ARTS第四周打卡(2019.05.13~2019.05.19)

所谓A(Algorithm)R(Review)T(Tips)S(Share):

. 每周至少做一个 leetcode 的算法题

. 阅读并点评至少一篇英文技术文章

. 学习至少一个技术技巧

. 分享一篇有观点和思考的技术文章

3 week

Algorithm 算法

[121] 买卖股票的最佳时机 

https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/description/

Tags: algorithms amazon bloomberg facebook microsoft uber array dynamic-programming 

Langs: c cpp csharp golang java javascript kotlin php python python3 ruby rust scala swift 

* algorithms
* Easy (47.86%)
* Total Accepted: 44.7K
* Total Submissions: 90.3K
* Testcase Example: '[7,1,5,3,6,4]'

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

注意你不能在买入股票前卖出股票。

示例 1:

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。


示例 2:

输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
 

# 动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题)
# 再根据子问题的解以得出原问题的解。

# 通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量:
# 一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。
# 这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。
# 动态规划算法的核心就是记住已经解决过的子问题的解
# 基本思路是对任意字符串,如果头和尾相同,那么它的最长回文子串一定是去头去尾之后的部分的最长回文子串加上头和尾。
# 如果头和尾不同,那么它的最长回文子串是去头的部分的最长回文子串和去尾的部分的最长回文子串的较长的那一个。 

#根据回文的特性,一个大回文按比例缩小后的字符串也必定是回文,比如ABCCBA,那BCCB肯定也是回文。
#所以我们可以根据动态规划的两个特点: 
#(1)把大问题拆解为小问题 
#(2)重复利用之前的计算结果 
#这道题。如何划分小问题,我们可以先把所有长度最短为1的子字符串计算出来,根据起始位置从左向右,这些必定是回文。
#然后计算所有长度为2的子字符串,再根据起始位置从左向右。到长度为3的时候,我们就可以利用上次的计算结果:
#如果中心对称的短字符串不是回文,那长字符串也不是,如果短字符串是回文,那就要看长字符串两头是否一样。
#这样,一直到长度最大的子字符串,我们就把整个字符串集穷举完了。 

Review 英文技术文章

Go Modules 的使用方法
https://blog.golang.org/using-go-modules
https://studygolang.com/articles/19334

Tip 技术点

redis中的跳表

Share 分享文章

https://juejin.im/post/5cd945d6e51d453d022cb65f?utm_source=gold_browser_extension

https://juejin.im/post/5cd81a2ef265da037516bfec?utm_source=gold_browser_extension

你可能感兴趣的:(ARTS第四周打卡(2019.05.13~2019.05.19))