ARTS是什么?
Algorithm:每周至少做一个leetcode的算法题;
Review:阅读并点评至少一篇英文技术文章;
Tip/Techni:学习至少一个技术技巧;
Share:分享一篇有观点和思考的技术文章。
Algorithm
题目:买卖股票的最佳时机 II
解题思路
这周挑了买卖股票2这题来做,之前做了买卖股票1,看到有2就想先把类似的都做了,做完2之后发现这是一个系列,还有3,4,5等等很多道变种题,俗话说举一反三,趁热打铁,接下去就先把这个系列做完再去做其他题目,好了,闲话少叙,下面我们来分析这系列的第二题。
读完题目发现这题和系列中的第一题最大的区别是这题中可以多次买卖股票,而我们所要求的就是最大的总利润。由于每天只能买入一只股票或卖出一只股票,所以最大的总利润 = Sum(每次卖出价格 - 每次买入价格),那么Sum(每次卖出价格 - 每次买入价格)怎么求呢,很简单,只要把数组中后一个较大的数减去前一个较小的数得到一天的差值,每次卖出价格减每次买入价格可能包含多天的差值,所以我们把所有差值加起来就是所要求的最大总利润。
代码
public static int getMaxProfit(int[] prices) {
int maxProfit = 0;
for (int i = 1; i < prices.length; i++) {
if (prices[i] - prices[i-1] > 0){
maxProfit += prices[i] - prices[i-1];
}
}
return maxProfit;
}
Review
在浏览medium发现一篇标题比较有意思的文章,原文链接在这里What I’ve learned six months into my first job as a self-taught software engineer,文章标题翻译过来就是"作为一名自学的软件工程师,我在第一份工作中学到的东西",可能平时我们见多了经验丰富的大牛或者标准的科班出身的学院派程序员的文章,所以第一眼看到自学成才的软件工程师还是不免好奇一下他的经历。
作者在文中主要分享了他的工作经历以及提出了一些建议。第一天的新员工成才计划、第一周的设置账户熟悉文档以及敏捷流程,然后在第一个月开始了真正的开发工作,学着如何与团队中的其他角色合作,如设计师、产品经理、开发、测试,特别是在遇到困难的时候该怎么处理,是直接请旁边的人帮忙呢还是自己想办法解决,作者在文中给出了自己的答案,如果你对作者的整个6个月的工作经历感兴趣,就去读一读原文吧。
Tip/Techni
这周在项目里运用了一个设计模式:观察者模式。业务是这样的:当编辑一项内容的时候,需要发送一个钉钉消息。考虑到后续可能会有其他的需求,比如发送手机短信,或者别的地方也要发送一个钉钉消息,为了解耦编辑操作和发送消息,使用观察者模式来处理,把编辑内容的类作为一个被观察者,发送钉钉消息的类作为观察者,每次观察到编辑的动作,就会触发发送钉钉消息的动作。
Share
这次分享一个github star 40K+的一个项目CyC2018/CS-Notes,作者在这个项目中搜集一系列计算机知识,包括算法、操作系统、网络、Java等等,内容丰富,结构清晰,尤其是对于Java开发者,基本包含了Java开发过程中的方方面面,总有你想要的知识点。学习这里面的知识只是一方面,我觉得更值得我们学习的是作者的这份耐心和坚持以及分享的精神,虽然里面的知识书上、网上都能找到,但是真正要把它们整理归类好也是一件不容易的事,而且在做这件事的时候想必对学这些知识点也会有不小的收货,期望有一天我也能为这个项目添砖加瓦,或是做一个类似的项目,看看是否能够做好它。