美文网首页
ARTS Week 1

ARTS Week 1

作者: AR7_ | 来源:发表于2023-10-22 22:42 被阅读0次

    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 = [2, 7, 11, 15], 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'], { shell: true })
    

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

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

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

    Share

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

    相关文章

      网友评论

          本文标题:ARTS Week 1

          本文链接:https://www.haomeiwen.com/subject/ouudidtx.html