Algorithm做算法题,Review点评英文文章,Tip总结技术技巧,Share做技术分享。每周打卡一次,这就是ARTS打卡。
1. 做算法题
LeetCode题目:9.回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
回文字符串好判断,将字符串逆序,和原字符串对比即可。这题是回文数字,可以借鉴回文字符串,先将数字转为字符串,再进行对比。代码如下:
class Solution:
def isPalindrome(self, x: int) -> bool:
s = str(x)
return True if s == ''.join(reversed(s)) else False
其中使用了reversed()和join()函数将字符串逆序。用上面代码跑出来用时100ms+,内存13MB+。还有一种思路,取数字的后一半逆序,再比较前一段数据,代码如下:
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0 or (x != 0 and x % 10 == 0):
return False
reversed_x = 0
while(x > reversed_x):
reversed_x = reversed_x * 10 + x % 10
x = x // 10
return x==reversed_x or x==reversed_x//10
执行时间70ms+,内存13MB+。速度有所提高,但是内存还是没有减少。
2. 点评英文文章
阅读内容:Teach Yourself Programming in Ten Years
中文翻译在这里。
在左耳朵耗子的专栏里推荐了这篇传世之作,我拜读了一下,有一些体会。
(1). 没有捷径
文章标题就是用十年学编程,文章举例很多计算机书籍标题是《24小时学会C++》之类的。在24小时或者21天,怎么可能学会一门编程语言。我以前也会有这样的错觉,学会了语言的基础语法就感觉学得差不多了。其实一门编程语言像一座冰山,容易看见的部分很少。一知半解是很危险的,知识像夹生饭在脑子里,说不懂又知道点皮毛,说熟练又用不起来。
(2). 动手做吧
编程靠看书是看不出来的,一定要自己手写代码。这个方面我很薄弱,看的比写的多,对知识的理解还停留在纸面。没有体现在代码里,知识很快就忘记了,效率很低。
(3). 去做凤尾
有句俗话“宁做鸡头,不做凤尾”,在编程里不大成立,要和牛人在一起工作,做团队里最差的那个,这样提高技术最快。
3. 技术技巧
西北大学的Knight Lab做了个学习SQL的侦探游戏网站,使用SQL语句查找凶杀案嫌疑人。该项目是开源的,源码在这,数据在这。在游戏中学会SQL,太有意思了。提醒一点,最好把ERD(实体关系图)复制下来,在“追凶”过程中随时查看。
4. 技术分享
分享一本互联网老兵阮一峰写的书《未来世界的幸存者》。电子版可以免费阅读,大概2小时能阅读完。作者对未来世界非常悲观,我虽然不是很赞同,但其中的一些逻辑可以给做技术的人一些启发。
我们一直相信,技术会让生活更美好,但是这一次,技术似乎正在动摇人类社会的结构,将整个社会一分为二:有技术的人与没技术的人。他们之间的贫富差距正在越拉越大,人类束手无策。
书中很多类似这种绝望的话语。对未来的预测,我是比较乐观的,虽然机器可能使得大部分人失业,但失业后并不代表贫穷。很多事情不需要人去做,生产力一定是大大提高了的,物资不再匮乏。很可能很多人只是对社会没什么用处,但依然可以温饱小康。作者对技术倍加推崇,认为未来改变命运要么通过学技术要么中彩票。这个观点我不置可否,因为世界太复杂,技术只是主要驱动力之一。
作者还有一个观点我是十分认同的,“你不是命运的骡子”。作者看见骡子背负称重的灯柱上山,感慨这美丽的灯光秀,骡子虽然默默付出,但并不能体会自己到底在做一件什么事情。这一节让我深深地共鸣,工作中、生活中,我何尝不像一只负重的骡子。每天只会机械的做事,很少跳出来看看自己到底做了什么,给别人带来了什么。对自己评价很低或者没有什么评价,这是很可怕的。作者还提了一个工作技巧,“起床后不要看邮件”,邮件也可以替换为微信、微博等媒体。起床后查收消息,看上去是主动和世界同步,其实是在被动地接受别人的安排。养成了这样的习惯,慢慢地命运的鞭子抽打在身上,茫然地向前走着,却不知道自己意见成为了一直骡子。