ARTS Week 1

Algorithm

本周的算法题为 1. 两数之和 - 力扣(LeetCode)

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

实现代码如下所示:

let nums = [271115], target = 9
var twoSum = function (nums, target{
    let output = []
    nums.forEach((item, i) => {
        nums.forEach((data, j) => {
            if (i !== j) {
                if (item + data === target) {
                    output.push(i)
                    output.push(j)
                }
            }
        })
    })
    output = Array.from(new Set(output))
    return output
};
twoSum(nums, target)

解题思路是,遍历两次 nums 数据,然后将 nums[i]nums[j] 相加,如果其值等于 target ,则添加到 output 数组中,以示例1的数据举例,因为遍历两次,会出现 [0,1][1,0] 的情况,所以需要对数组去重,数组去重使用 Array.from(new Set(output)) 实现。至此,是可以实现示例1的需求了,但是如果是示例2时,就会出问题。

示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]

因为是遍历两次nums数组的,当[0,0]时,也是可以满足等于6的条件的,然后两个0就会被添加到output数组中,然后去重,就会有0,然后我们通过肉眼可知,正确结果是[1,2]的,为了解决这个漏洞就需要判断不要让同下标的数值进行相加,也就是if(i !== j)

这个代码实现思路其实很不满意,会有更优的实现方式,现在刚开始,首要目的是解得出来,后面总结再进一步学习和优化。

Review

The Reader in a Non-Bookish Community | by Mirra Esmael | Sep, 2023 | Medium

  1. 作者认为阅读和成为读者都是一种骄傲,它不是由你读过的书的数量来定义的,也不是因为阅读是大多数人觉得令人生畏的活动之一,而是作为一个读书意味着你的大脑已经探索了无数页的论点、概念、问题和表述。
  2. 在作者家乡,根据读者主要阅读材料,可以有三种类型读者:1、为了学习而读书;2、为了背诵《古兰经》;3、为了娱乐而读书,作者是第三种读者。
  3. 爱读书的人是积极地、有规律地或大部分时间都在读书的人。
  4. 虽然阅读对大多数人来说有积极的内涵和印象,但是没有实际行动来支持这一点。
  5. 不管读书带来的是好处还是坏处,作者一直认为它是一个积极的因素,它给作者带来了更多的机会。这就是为什么作者一直在向她的朋友和亲人宣传阅读。

Tip

node:internal/errors:477
    ErrorCaptureStackTrace(err);
    ^
Error: Command failed with ENOENT: npm run clean
spawn npm run clean ENOENT
    at Process.ChildProcess._handle.onexit (node:internal/child_process:283:19)
    at onErrorNT (node:internal/child_process:478:16)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  errno: -2,
  code: 'ENOENT',
  syscall: 'spawn npm run clean',
  path: 'npm run clean',
  spawnargs: [],
  originalMessage: 'spawn npm run clean ENOENT',
  shortMessage: 'Command failed with ENOENT: npm run clean\nspawn npm run clean ENOENT',
  command'npm run clean',
  exitCode: undefined,
  signal: undefined,
  signalDescription: undefined,
  stdout: '',
  stderr: '',
  failed: true,
  timedOut: false,
  isCanceled: false,
  killed: false
}

从报错信息可知,代码在执行到npm run clean命令时报错了,提示找不到这个命令,但是我复制命令在终端运行是成功的,在windows10系统是没问题的,但我在mac系统上运行就报错了,执行代码如下所示:

await execa('npm run clean')

初步猜测,可能execa用法在mac环境中不生效。将其注释,没有提示报错,所以,接着就要研究如何在mac环境中使用execa了。只需将

execa('npm run clean'

改写为

execa('npm', ['run''clean'], { shelltrue })

即可,这时,我们就会想知道这两种用法有什么区别呢?

execa是一个用于执行shell命令的Node.js模块,它可以将命令作为参数传递给它,并返回一个Promise,以便在命令执行完成之后处理。根据报错提示没有找到npm命令,很有可能是execa模块无法正确识别到环境变量。

所以将npm run clean拆分为npmrun clean两个参数,并将 shell 选项设置为true,以便在子进程中运行命令的时候使用默认的shell,这样可以正确找到npm命令并且识别环境变量,找到npm命令。

Share

  1. 使用 ChatGPT有一段时间了, 发现用来工作和学习效率真是太高了,只要提问就能得到你想要的答案。我就一直在想,如果我一问就给出全部答案了,那我还写什么技术博文,直接复制粘贴就完成一篇技术博文了。但要真是这样,那可太没意思了,纯粹是搬运工,自己根本没掌握这些知识,有啥用?。 ChatGPT只是一个工具,工具没有好坏,要看使用工具的人。
  2. 一直觉得”技术+英语+法律“应该是一个比较有优势的程序员形态,技术就像Y轴,英语就像是X轴,法律是坐标轴外圆,这是你能拥有的安全的东西。技术让你站得更高,英语让你看得更远,法律是让你可以做对的事情。

本文由 mdnice 多平台发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AR7_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值