写点什么

ARTS 薪火重启之第一周

作者:渣渣辉
  • 2023-08-15
    日本
  • 本文字数:1241 字

    阅读完需:约 4 分钟

ARTS薪火重启之第一周

Algorithm

力扣中级题:11. 盛最多水的容器 - 力扣(LeetCode)

描述:

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

变量:

hl,hr 水位高度

i,j 水位下标

(j-i)*(hl>hr?hr:hl)面积

解题思路:

  1. 暴力解题:通过两层 for 循环从左或者右段逐个遍历数组,保存面积最大的那个数值。※暴力求解会超时

  2. 使用双向指针:左右两边各设置一个指针,朝着彼此靠近,如果靠近则程序结束。

原理:当你决定往左移动还是往右移动的时候需要判断左右的水位高度 hl,hr。如果有一侧高的话则 需要移动水位低的一侧(如果你移动高的一侧不可能让面积上升)。

代码:

/** * @param {number[]} height * @return {number} */var maxArea = function(height) {    let volume = 0;    let i=0;    let j=height.length-1;    let hl=0;    let hr=0;    let now = 0;    while(i<=j){        hl=height[i];        hr=height[j];        now = (j-i)*(hl>hr?hr:hl);        if(now>volume)            volume=now;        hl>hr?j--:i++;    }    return volume;};
复制代码

Review

文章链接:Six programming paradigms that will change how you think about coding (ybrikman.com)

大致内容:

文章介绍了四种可能改变你对编码思考方式的编程范式:

  1. 并发默认:语言如 ANI 和 Plaid 中,代码默认并行执行。

  2. 依赖类型:如 Idris、Agda、Coq 中,允许在编译时检查特定的变量值类型。

  3. 串联语言:如 Forth、cat、joy 中,主要通过函数组合而无变量或函数应用。

  4. 声明式编程:如 Prolog、SQL,用户只描述想要的结果,而非如何达到。

这些范式为我们提供了新的角度来看待编码问题。

心得:

编程就像做饭,有各种做法和食谱。前面提到的四种“做饭方法”让我们从不同的角度看待如何制作“菜肴”。有的方法让多个“锅”同时工作,有的则确保用的“材料”完全匹配食谱,还有的方法是一步接一步添加“调料”来炒菜,而最后一个则告诉“厨师”你想要的味道,让他自己决定怎么做。学习这些新方法,让我们更全面地理解编程的“烹饪艺术”。

Tips

在面试的时候,常常会问数组和链表的区别,很多人都回答说,“链表适合插入、删除,时间复杂度 O(1);数组适合查找,查找时间复杂度为 O(1)”。实际上,这种表述是不准确的。数组是适合查找操作,但是查找的时间复杂度并不为 O(1)。即便是排好序的数组,你用二分查找,时间复杂度也是 O(logn)。所以,正确的表述应该是,数组支持随机访问,根据下标随机访问的时间复杂度为 O(1)。

Share

我现在工作三年了,在三年期间干过开发,运维,devops 但是都没有很深入。因为我的工作性质,我的工作内容会随时改变。我想是时候决定接下来应该专攻那一条路了。目前我在做 devops 相关的工作,我对这块也很感兴趣。所以 devops+k8s 运维大概率会是我接下来的方向。下一期我准备分享下如何专攻这个方向以及其他需要做的准备。

用户头像

渣渣辉

关注

还未添加个人签名 2020-03-17 加入

还未添加个人简介

评论

发布
暂无评论
ARTS薪火重启之第一周_算法_渣渣辉_InfoQ写作社区