ARTS Week 1

Algorithm

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

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

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

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

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

实现代码如下所示:

javascript 复制代码
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时,就会出问题。

ini 复制代码
示例 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

yaml 复制代码
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系统上运行就报错了,执行代码如下所示:

csharp 复制代码
await execa('npm run clean')

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

scss 复制代码
execa('npm run clean') 

改写为

php 复制代码
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轴,法律是坐标轴外圆,这是你能拥有的安全的东西。技术让你站得更高,英语让你看得更远,法律是让你可以做对的事情。
相关推荐
蟾宫曲2 小时前
在 Vue3 项目中实现计时器组件的使用(Vite+Vue3+Node+npm+Element-plus,附测试代码)
前端·npm·vue3·vite·element-plus·计时器
秋雨凉人心3 小时前
简单发布一个npm包
前端·javascript·webpack·npm·node.js
liuxin334455663 小时前
学籍管理系统:实现教育管理现代化
java·开发语言·前端·数据库·安全
qq13267029403 小时前
运行Zr.Admin项目(前端)
前端·vue2·zradmin前端·zradmin vue·运行zradmin·vue2版本zradmin
魏时烟4 小时前
css文字折行以及双端对齐实现方式
前端·css
哥谭居民00015 小时前
将一个组件的propName属性与父组件中的variable变量进行双向绑定的vue3(组件传值)
javascript·vue.js·typescript·npm·node.js·css3
踢足球的,程序猿5 小时前
Android native+html5的混合开发
javascript
2401_882726485 小时前
低代码配置式组态软件-BY组态
前端·物联网·低代码·前端框架·编辑器·web
web130933203985 小时前
ctfshow-web入门-文件包含(web82-web86)条件竞争实现session会话文件包含
前端·github
胡西风_foxww5 小时前
【ES6复习笔记】迭代器(10)
前端·笔记·迭代器·es6·iterator