ARTS 薪火重启之第一周
Algorithm
力扣中级题:11. 盛最多水的容器 - 力扣(LeetCode)
描述:
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
变量:
hl,hr 水位高度
i,j 水位下标
(j-i)*(hl>hr?hr:hl)面积
解题思路:
暴力解题:通过两层 for 循环从左或者右段逐个遍历数组,保存面积最大的那个数值。※暴力求解会超时
使用双向指针:左右两边各设置一个指针,朝着彼此靠近,如果靠近则程序结束。
原理:当你决定往左移动还是往右移动的时候需要判断左右的水位高度 hl,hr。如果有一侧高的话则 需要移动水位低的一侧(如果你移动高的一侧不可能让面积上升)。
代码:
Review
文章链接:Six programming paradigms that will change how you think about coding (ybrikman.com)
大致内容:
文章介绍了四种可能改变你对编码思考方式的编程范式:
并发默认:语言如 ANI 和 Plaid 中,代码默认并行执行。
依赖类型:如 Idris、Agda、Coq 中,允许在编译时检查特定的变量值类型。
串联语言:如 Forth、cat、joy 中,主要通过函数组合而无变量或函数应用。
声明式编程:如 Prolog、SQL,用户只描述想要的结果,而非如何达到。
这些范式为我们提供了新的角度来看待编码问题。
心得:
编程就像做饭,有各种做法和食谱。前面提到的四种“做饭方法”让我们从不同的角度看待如何制作“菜肴”。有的方法让多个“锅”同时工作,有的则确保用的“材料”完全匹配食谱,还有的方法是一步接一步添加“调料”来炒菜,而最后一个则告诉“厨师”你想要的味道,让他自己决定怎么做。学习这些新方法,让我们更全面地理解编程的“烹饪艺术”。
Tips
在面试的时候,常常会问数组和链表的区别,很多人都回答说,“链表适合插入、删除,时间复杂度 O(1);数组适合查找,查找时间复杂度为 O(1)”。实际上,这种表述是不准确的。数组是适合查找操作,但是查找的时间复杂度并不为 O(1)。即便是排好序的数组,你用二分查找,时间复杂度也是 O(logn)。所以,正确的表述应该是,数组支持随机访问,根据下标随机访问的时间复杂度为 O(1)。
Share
我现在工作三年了,在三年期间干过开发,运维,devops 但是都没有很深入。因为我的工作性质,我的工作内容会随时改变。我想是时候决定接下来应该专攻那一条路了。目前我在做 devops 相关的工作,我对这块也很感兴趣。所以 devops+k8s 运维大概率会是我接下来的方向。下一期我准备分享下如何专攻这个方向以及其他需要做的准备。
评论