写点什么

ARTS 薪火重启之第二周

作者:渣渣辉
  • 2023-08-22
    日本
  • 本文字数:1731 字

    阅读完需:约 6 分钟

ARTS 薪火重启之第二周

Algorithm

力扣中级题:15. 三数之和

描述:

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

变量:

result[]: 结果数组

i: 遍历数组的下标。

l: 数组左边的指针。

r: 数组右边的指针。

解题思路:

・O(n 的二次方): 首先先将整数数组nums进行排序。我使用的是 JS 里面的 sort()方法,这个时间复杂度应该是 Ologn。然后通过 for 循环遍历数组,通过计算数组下标的数值 nums[i],nums[l],nums[r]的和是否为 0 来将结果输入进 result 里。※因为提示里要求不能包含重复的三元组因此需要对结果进行过滤。过滤方法如下:对于变量 i:如果左边的数跟当前的 i 一样的话则跳过筛选,因为 i 是左边的的数的时候已经判断过了。对于变量 l: 在匹配成功后需要向右移动,如果右边的数据等于当前的 l 的数据的话则跳过这个数据,因为如果右边的数跟当前 l 一样的话会重复判断。变量 r 跟变量 l 同理,只不过是往左边遍历。

代码:

/** * @param {number[]} nums * @return {number[][]} */var threeSum = function(nums) {    let result = [];    if(nums.length<3)        return result;    let l = 1;    let r = nums.length - 1;    nums.sort((a, b) => a - b);    console.log(nums)    for (let i = 0; i < nums.length; i++) {        l=i+1;        r=nums.length-1        while(l < r ) {            if(nums[i]+nums[l]+nums[r]===0 && nums[i]!=nums[i-1]){                result.push([nums[i],nums[l],nums[r]]);                while(l<r && nums[l]===nums[l+1])                    l++;                while(l<r && nums[r]===nums[r-1])                    r--;                l++;                r--;            } else if(nums[i]+nums[l]+nums[r]>0){                r--;            } else{                l++;            }        }    }    return result;
};
复制代码


Review

文章链接:How To Ask Questions The Smart Way (catb.org)

大致内容:

  1. 做好准备工作:在你问问题之前,尽量自己找答案。搜索网站,查看 FAQ,阅读手册,以及检查相关的邮件列表档案。

  2. 选择合适的论坛:确保你在一个相关和适当的地方提问。例如,不要在一个关于 Linux 的论坛上问一个关于 Windows 的问题。

  3. 描述问题清晰、准确:给出你正在尝试达到的目标、所采取的步骤、你遇到的问题以及你的操作系统和软件版本。避免使用模糊的描述,如“它不工作”。

  4. 标题明确、具体:好的标题可以更快地吸引知道答案的人的注意。

  5. 礼貌并表现出尊重:没有人有义务回答你的问题。礼貌、感谢并尊重他人的时间会使你更容易得到帮助。

  6. 避免提出明显的问题:像“这是什么?”或“我可以从哪里得到这个?”这样的问题表现出你没有做足够的研究。

  7. 描述问题的症状,而不是你认为的原因:通常,描述问题的现象比告诉别人你认为问题出在哪更有用。

  8. 描述你已经尝试的解决方案:这可以避免别人建议你已经尝试过的方法。

  9. 在线等待回复并及时响应:如果有人回复并请求更多信息,尽快提供,这可以增加你获得有用答案的机会。

  10. 得到答案后,提供反馈:告诉别人哪个建议起作用了,或者如果你自己找到了答案,也分享出来。

心得:

我个人不是很喜欢提问,因为提问后等待回答需要很多时间。我一般会先通过使用 chatgpt 来寻找解决办法。如果遇到了时序限制的问题我会去项目的 github 查看 issue 或者去 stackoverflow 查看。

Tips

Docker 的容器化技术使用了 linux 里面的 cgroup 以及 namespace 这两个功能。通过 namespace 隔离进程,网络,挂载等。通过 cgroup 隔离进程所需要的资源。

Share

接着上一期ARTS薪火重启之第一周_算法_渣渣辉_InfoQ写作社区的回答,我认为现在市面上的 devops 的工具有很多,我们如果都要学习的话是很浪费时间以及未必能学好它,我这里推荐 azure devops 这个工具。首先这个是我的公司正在使用的技术,并且对于少人数来说的话它是免费的。建议考取 az-400 这个资格。对于学习 k8s 老实说我也不知很清楚,我准备先学习极客时间的 k8s 教程,学习结束后准备跟公司申请使用这个技术来加深理解。

用户头像

渣渣辉

关注

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

还未添加个人简介

评论

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