ARTS|Week 03 (2020 第 24 周)

用户头像
MiracleWong
关注
发布于: 2020 年 06 月 14 日
ARTS|Week 03 (2020第24周)



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

1. Algorithm

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

实际时间花费:90分钟

算法题目

算法题链接:11. 盛最多水的容器(container-with-most-water)

给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器,且 n 的值至少为 2。

题目分析

题目的理解:题目的本质,实际上寻找两根垂直线所组成的矩形的面积的最大值。其中,垂直线 i 的有两个端点组成,两个端点分别为 (i, ai) 和 (i, 0)。这是数学意义上的抽象的线,没有实际的宽度和高度。第一次理解的时候,我以为还要将整体矩形的面积减去每条线所组成的黑色的矩形的面积(如图所示)。

方案1:暴力解法,双重循环,找到所有可能的垂直线的组合方式,将其组成的矩形值记录,并求出最大值。时间复杂度:O(n2),空间复杂度:O(1)。

方案2:暴力解法,双指针,一个指针指向最前,一个指向最后,比较两个垂直线的高低,低的一方向高的一方移动(为什么不是高的向低的移动:因为面积=高度(两相比较的低的一方)* 宽度(两条线的距离),高的向低的一方移动,面积不会有增大的改变;而低的向高的移到,虽然宽度减少,但有可能高度增加使得总体面积增加)。时间复杂度:O(n),空间复杂度:O(1)。

代码

我是通过Java来对算法进行实现。

public class Solution {
public int maxArea(int[] height) {
int maxarea = 0, i = 0, j = height.length - 1;
while (i < j) {
maxarea = Math.max(maxarea, Math.min(height[i], height[j]) * (j - i));
if (height[i] < height[j])
i++;
else
j--;
}
return maxarea;

2. Review

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

实际时间花费:30分钟

文章链接:Learn a little jq, awk and sed

我的点评

  1. 技巧比较浅显,awk的例子没有使用到高级用法,sed 的例子用到的正则还可以

  2. 了解了jq,可以更好的显示json数据,之前都是使用curl 后接 python -m json.tool 的,已经将jq添加到了自己的工具库中。

  3. 作者的博客还不错,语言很浅显和讨论的话题涵盖了技术、生活工作和职场各方面,适合阅读。



3. Tip

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

实际时间花费:25分钟

技巧



# 显示第1列,第3列
awk '{ print $1,"-",$3 }' filename
# 加入头部和尾部
awk 'BEGIN { print "Customers List:\n==="} { print } END { print "====\nnum:" NR }' filename

我的学习

  1. 可以写以 #!/usr/bin/awk -f 的shell脚本,执行时脚本后接文件即可

  2. FS为指定列分隔符,默认为空格和Tab,OFS列输出分隔符,默认space,RS是记录分隔符,默认的分隔符是\n,ORS记录输出分符符,默认值是\n。

  3. NF 字段个数,(读取的列数);NR 记录数(行号),从1开始,新的文件延续上面的计数,新文件不从1开始;FNR 读取文件的记录数(行号),从1开始,新的文件重新从1开始计数

4. Share

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

实际时间:40分钟

文章链接:系统管理员应该知道的9个kubectl命令

我的学习

  1. kubectl get —— 列出当前集群上可用的资源清单,

  2. kubectl cteate —— 创建资源,-f 后面接“资源文件”

  3. kubectl edit —— 修改已经创建好的资源。

  4. 在3 基础上,KUBE_EDITOR="nano" or KUBE_EDITOR="vim",指定默认编辑器

  5. kubectl delete —— 删除资源

  6. kubectl apply —— 通过配置文件将配置应用于你的资源

  7. kubectl describe —— 显示查看的资源的详情,内部应用程序发生的事件

  8. kubect logs —— 提供了Kubernetes中Pod相关的详细信息

  9. kubect exec —— 进入到容器中对应用程序进行问题定位

  10. kubectl cp —— 命令用于在容器间复制文件和目录。copy到容器内:kubectl cp /tmp/foo <some-namespace>/<some-pod>:/tmp/bar 。 从容器内copy出来:kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar

  11. 在1~10基础上,-n 后接命名空间。

  12. 学会建立自己的备忘清单(Memo List), 用于分享日常工作中命令行技巧相关的主题,便于快速查找和记忆。



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

MiracleWong

关注

Hello World, Hello Miracle! 2017.10.24 加入

运维开发工程师!

评论

发布
暂无评论
ARTS|Week 03 (2020第24周)