进入简书的第一天
今天通过和刘兄交流,深感坚持写博客不仅可以提升自己的写作能力,还可以总结每天学习的东西,记录自己对于生活的感悟,以后回过头来看自己前一阶段所学所思实是一种乐趣。
因此,我脑海中产生一个大胆的想法,坚持每天记录博客,记录自己的每天所学所思所得。尽量做到细致,就算再没时间每天也要坚持写三五十个字。这对我本人是一个不小的挑战,因为我很难长时间坚持做一件事情- -,也许是星座的原因(据说双子座经精力不容易集中。哈哈,无情甩锅)。
每天的记录从两个方面进行:
- 对于今日所学所思进行总结
- 对于明天学习生活的作一个简单计划
等以后写作技巧渐渐纯熟,我会尝试开辟专栏来对特定方面的技术进行连载(哈哈,前提日报能坚持下来~)
今日总结
今天学习方面主要是编程。在leetcode(力扣)网站上刷了五道编程题。
- 第K个排列 (middle)
- 旋转链表 (middle)
- 不同路径II (middle)
- 最小路径和 (middle)
- 有效数字 (hard)
“第K个排列”用到一个非常强的技巧,称之为阶乘数系统方法。其数学原理就是排列的每种情况都可以用十进制或二进制表示,在十进制和二进制无法满足解空间数量时,甚至可以使用阶乘数系统(即N!)。这种方法可以精确的计算出排列中第k大的组合。相比先列出全排列再排序,时间复杂度从O(N^N) 下降到了O(N^2)。可见优化一个算法的非常有效的方法是从数学上去优化。顺便复习一下全排列的实现方法(回溯法)。下次学习一下生成全排列的字典序方法。
“旋转链表”相对常规,遍历链表两次,第一次计算其长度并将其首尾相连,第二次在指定位置将链表断开即可,注意使用k%N减少遍历长度。
不同路径II”和“最小路径和”是简单的动态规划问题,最优子结构很容易看出。这里我出了一个很简单却很致命的错误,查了好久才查出来,仅此记录:
#test.py
for i in len(nums): //错误
for i in range(len(nums)): //正确
“有效数字” 这一道题可以采用常规的正则表达式法,还有一个非常骚的操作:采用《编译原理》里的确定有限状态机(DFA)解决。仔细阅读官方题解深感DFA方法精妙,举一反三也可以应用到其他问题上,后面有机会将对其进行深入剖析,这里不再赘述(第一次写,写到这已经花了1个多小时,哭)。
这两天在家又刷了一遍经典西游记,看到真假美猴王一集,如来佛祖称其用金钵罩住的是六耳猕猴。我脑洞大开,会不会被罩住的才是真正的孙悟空,后来陪唐僧取经的是六耳猕猴,这其实是一次阴谋的除掉孙悟空的行动?哈哈,纯属个人胡乱猜测。
明天计划
明天进入工作日,结束两天轻松生活开始工作:
- 继续编程,在LeetCode上刷7道题并总结(3道算法题,3道SQL题,1道Shell题)
- 复习Python的高级特性(metaclass、装饰器、偏函数等)
- 和刘兄讨论微信小程序开发计划,并着手开发(交互式问卷系统,修复公众号代码)
- 坚持记录博客,提高写作效率,优化内容,争取每天花费时间在一个小时内
就这样吧~