写点什么

ARTS|Week 3 本周的主题可能是乱

用户头像
Puran
关注
发布于: 2020 年 06 月 14 日
ARTS|Week 3 本周的主题可能是乱

ARTS是极客时间推出的一个打卡活动,通过100天的关于Algorithm、Review、Tip和Share的刻意训练,来实现进阶。

1. Algorithm

每周至少做一个LeetCode算法题,为了编程训练和学习。

实际时间:80分钟

算法题目

算法题链接:https://leetcode.com/problems/roman-to-integer/

给定一个罗马数字,将其转换成整数,输入确保在1 至 3999的范围内。

题目分析

该题目有很多种方法,我这里只实现了理解起来较为简单的两种方法。

  • 前后数字对比法,就是遍历所有的罗马数字,然后根据其对应的数值做加法。其中,需要把当前的数字与前一个数字进行比较,如果小于前一个数字,则正常的做加法;如果大于前一个数字,那么说明当前数字与前一个数字是一个特例组合,需要减去两倍的前一个数字。

  • 正则表达式法,该方法是将所有的罗马数字的组合罗列出来,通过正则表达式来找到不同的组合,并求和。在正则表达式的模式识别上,需要注意罗马数字组合的顺序,比如 IV 一定要在I前面,否则正则表达式的判断都是优先提取出 I 来。

代码

Python代码实现如下:



  1. 前后两数对比法:

class Solution:
def romanToInt(self, s: str) -> int:
roman_to_int = {
“I”:1, “V”:5, “X”:10, “L”: 50 , “C”: 100, “D”: 500, “M”: 1000
}
total = 0
prev_value = 0
for letter in s:
value = roman_to_int[letter]
total += value
if value > prev_value:
total -= 2 * prev_value
prev_value = value
return total



  1. 正则表达式法:

重点在于正则表达式匹配模式的顺序:r’IV|IX|I|V|XL|XC|X|L|CD|CM|C|D|M’

class Solution:
def romanToInt(self, s: str) -> int:
roman_to_int = {
“I”:1, “IV”: 4, “V”:5, “IX”: 9, “X”:10, “XL”: 40, “L”: 50 , “XC”: 90, “C”: 100, “CD”: 400, “D”: 500, “CM”: 900, “M”: 1000
}
pattern_re = re.compile(r’IV|IX|I|V|XL|XC|X|L|CD|CM|C|D|M’)
result = 0
for m in re.finditer(pattern_re, s):
result += roman_to_int[m.group(0)]
return result



从提交的记录来看,算法效率比较低:

完整的分享记录在了:LeetCode | 3. Roman to Integer 罗马数字转整数

2. Review

阅读并点评至少一篇技术文章,通过英文技术文章来学习英文。

实际时间:30分钟

42岁转软件开发工程师,有戏吗?

文章链接:https://www.quora.com/Is-it-possible-to-be-a-software-engineer-at-age-42

我的点评

这是 Quora 上的一个问答,这里列其中两个有代表性的故事:

  1. 答者对计算机一直比较感兴趣,也经常装电脑、修电脑等等。在32岁时帮着做一些足球比赛的统计工作,被发现有作为开发者的潜质,于是开始被带着学习和自学大量的相关内容。到40岁时,开始找工作,一开始猎头们都不看好,最后也还是如愿,并很快就从初级做到了高级。由于年纪较大且自学,答者告诫必须要保持激情和学习方向的正确性。

  2. 另一个答者是40岁去学了个 CS 的本科,3年后开始找工作,先是大数据相关的实习,6个月后转正为 Junior。答者本身之前有一些IT相关的工作,再加上自己又专门花了时间去学习 CS,所以相比同年级的人要表现好一些。



相比他们,我现在开始转型学习 Program,至少在年龄上是很大的优势啦,加油。

3. Tip

学习至少一个技术技巧,为了总结和归纳日常工作中遇到的知识点。

实际时间:20分钟

Proxy

以前在科学上网时,太依赖于第三方工具,比如 ShadowsocksClashX等,因此基本上只使用了 SOCKS 的方式来绕过防火墙。由于一些限制,不能在工作电脑中使用第三方工具和 VPN 了,便尝试着使用系统自带的 Proxy 来配置科学上网。

  • 在 Windows 10 上,直接通过 Settings - Network & Internet - Proxy进行配置 http 的代理设置。当然,也可以直接在 IE 的 Internet Options中进行配置。

  • 在 macOS 上,则是在 System Preferences - Network - Wi-Fi - Advanced - Proxies 中,选择 Web Proxy (HTTP) 进行配置。如果需要在家庭和工作这两个不同的网络间切换的话,可以用到 Network 提供的 Location 功能来对这两个不同地方的网络的 Proxy 进行配置。

  • 在 Chrome 浏览器中,仍然可以通过 Proxy SwitchyOmega 来使用配置代理,此时只需将 Proxy 的类型做一修改,比如从原来的 SOCKS 变为 HTTP。

4. Share

分享一篇有观点和思考的技术文章,为了建立影响力、输出价值观。

实际时间:100分钟

策略模式

这周没有太多的输出,只是学习并分享了设计模式中的策略模式,详细可以参考 大话设计模式 | 2. 策略模式



本周相比之前,原本规律的作息被稍微打破了,学习的时间也就没能保证上。

发布于: 2020 年 06 月 14 日阅读数: 67
用户头像

Puran

关注

GIS从业者,正在往开发的路上小跑。 2018.03.29 加入

从业4年的GIS开发小白,work@esri。

评论

发布
暂无评论
ARTS|Week 3 本周的主题可能是乱