ARTS|Week 02:体会刷算法题的快乐,同时开启 Ubuntu 20.04 备用系统
ARTS是极客时间推出的一个打卡活动,通过100天的关于Algorithm、Review、Tip和Share的刻意训练,来实现进阶。
1. Algorithm
要求:每周至少做一个LeetCode算法题,为了编程训练和学习。
实际时间花费:120分钟,自己认真刷了一遍,看了很多解题方法
算法题目
算法题链接:Move Zeroes
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
题目分析
本题属于“数组变换”的范畴,
第一种方法:后面加(append)0,前面删(remove)0,这种方式的时间复杂度比较高为O(n2),外部循环为O(n),内部的插入为O(1),删除群移为O(n)
第二种方法:双指针法,j快指针,指向非元素,i慢指针,指向最新一个0元素的位置,循环数组时,j当遇到非零元素则开始交换慢指针所指的0元素
代码
我是通过Python 3 来对算法进行实现。
方法1:
方法2:
2. Review
阅读并点评至少一篇技术文章,通过英文技术文章来学习英文。
实际时间花费:30分钟
文章链接:How to use git cherry-pick effectively - Git Better
我的点评
学到了一个新的命令 git cherry-pick <commitHash>(俗称:摘樱桃),有条件和选择的选择合并部分代码。不是之前的一股脑git merge
发现之前 @阮一峰 也发了一个 git cherry-pick 教程 - 阮一峰的网络日志
通过自行测试得知cherry-pick 只会合并当前的commit 到指定分支,之前的是不会的。这也有了后面的“转移连续的提交”
转移多个提交:git cherry-pick <HashA> <HashB>
转移连续的提交:git cherry-pick A..B (不包含A)
转移连续的提交:git cherry-pick A^..B (包含A)
3. Tip
学习至少一个技术技巧,为了总结和归纳日常工作中遇到的知识点。
实际时间花费:30分钟
技巧
我的学习
在Shell脚本中使用lftp替代ftp,会有更精简的代码,尤其是做备份上传文件时
适时的使用lftp -c "cmd",是一种很好的方式,避免进入lftp的shell
4. Share
分享一篇有观点和思考的技术文章,为了建立影响力、输出价值观。
实际时间:20分钟
文章链接:写给工程师的 Ubuntu 20.04 最佳配置指南
我的学习
一篇很不错的Ubuntu 20.04 系统的装机指南,由于我不是Ubuntu Desktop作为主力开发工具,所以很多的桌面的设置用不到。
Zsh的配置和插件是通用的,在Mac上也可以很好的使用。
第5章节“使用问题记录”好评,不过应该在文章的最开始说明,这样在每个小章节遇到问题时,可以及时查找。
deep-wine-ubuntu 和 alien ,这种需要转换思路的工具不错。
从运维的角度来讲没有提供一个可以一键执行的脚本,当然也和很多工具需要前面的工具及时的安装才可以使用有关。
参考资料
版权声明: 本文为 InfoQ 作者【MiracleWong】的原创文章。
原文链接:【http://xie.infoq.cn/article/53782f5def8e641977bc04ee5】。文章转载请联系作者。
评论