ARTS是什么?
Algorithm:每周至少做一个leetcode的算法题;
Review:阅读并点评至少一篇英文技术文章;
Tip/Techni:学习至少一个技术技巧;
Share:分享一篇有观点和思考的技术文章。
一、Algorithm
Question:
Given a list of daily temperatures T, return a list such that, for each day in the input, tells you how many days you would have to wait until a warmer temperature. If there is no future day for which this is possible, put 0 instead.
For example, given the list of temperatures T = [73, 74, 75, 71, 69, 72, 76,73], your output should be [1, 1, 4, 2, 1, 1, 0, 0].
Solution1:
暴力轮训法:用两个指针标记,第一指针指针记录当前的位置,第二个指针负责找到比当前更warmer的第一天,找到后复位。知道最后一个。时间复杂度为O(N*N),空间复杂度为O(1)。提交的时候timeout了。
class Solution:
def dailyTemperatures(self, T: List[int]) -> List[int]:
ans = []
for a in range(len(T)):
b = a
count = 0
tag = False
while b < (len(T)-1):
count += 1
b += 1
if (T[b]>T[a]):
tag = True
break
if tag:
ans.append(count)
else:
ans.append(0)
return ans
Solution2:
这个方案是网上找到的,花了很长时间才能弄明白....
堆:从数组的开头开始遍历,堆保存当前的index,并且每次和堆的最上面一个温度值比较,如果当前的温度比堆最上面的温度高,说明天气更暖和了,把两个index相减,就是我们需要的值,把这个值用list保存,然后把堆最上面一个pop,继续比较,直到温度不比堆的最上面温度高。由于每个index最多pop和push一次,所以时间复杂度为O(n),空间复杂度也是O(n)。
class Solution:
def dailyTemperatures(self, T: List[int]) -> List[int]:
stack = []
ret = [ 0 for i in range(len(T))]
for i in range(len(T)):
while ( stack and T[i] > T[stack[-1]]):
ret[stack[-1]] = i - stack[-1]
stack.pop()
stack.append(i)
return ret
二、Review
文章链接:https://medium.freecodecamp.org/how-i-doubled-my-salary-in-5-months-and-got-an-amazing-job-1110d1779e0b
点评:
作者对自己的喜好及目标非常明确:中级全栈工程师(mid level full stack developer)
然后分析工作要求和自己的短板:
- 精通JavaScript
- 熟悉至少一种框架 React or Angular
- 具备开发REST API的能力
- 了解数据库原理(SQL MongoDB .etc)
然后制定了计划:
- 阅读You Dont Know JS
- Angular, Vue, React,作者选择了React
- 继续加强Rest API开发能力
- 学习MongoDB
根据自己学习的内容,还练手的不少的项目。文章中提到了不少的资源,对我们都有参考价值。同时还制作了自己的主页,可以展示自己,并且还做了不少设计上的优化,当然他同时还写技术博客,这些都是加分项。在作者投了很多的简历,然后又5个面试,在最后拿到的几个offer中,选了2个,并且为谈薪水做了相应的准备。
准备很充分,找到好工作不难。万事预则立,不预则废。共勉。
三、Techni
mac 效率神器,Alfred:https://www.jianshu.com/p/e9f3352c785f
如果用mac,可以减少使用触摸板和鼠标,从而提高效率,alfred的功能包括文件查找,文件内容查找,剪切板,快捷计算器,快捷搜索,自定义workflow等等
四、Share
最近公司在做高可用建设,mysql和Redis是其中的难点,下面两篇分别为阿里巴巴关于DB高可用方案的分享。之前对DB了解比较少,很多东西都还在学习中,这两个暂时还没有全明白。
数据库高可用
Redis异地多活与冲突解决