Algorithm

本周的算法题为 1822. 数组元素积的符号

已知函数 signFunc(x) 将会根据 x 的正负返回特定值:

  • 如果 x 是正数,返回 1
  • 如果 x 是负数,返回 -1
  • 如果 x 是等于 0 ,返回 0

给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的乘积。

返回 signFunc(product)

示例 1

输入nums = [-1,-2,-3,-4,3,2,1]
输出1
解释数组中所有值的乘积是 144  signFunc(144) = 1

实现代码如下:

let arraySign = function (nums) {
    let product = 1
    nums.forEach(n => {
        if (n === 0) {
            product = 0
            return
        }
        product = product * n

    });
    return signFunc(product)

    function signFunc(p) {
        if (p > 0) {
            return 1
        } else if (p < 0) {
            return -1
        } else {
            return 0
        }
    }
}

解题思路:

题目很简单。

Review

Nature can reduce anxiety and boost mental health - Breaking News English Lesson

我们都知道,置身于大自然中对我们有好处。新的研究表明,在自然界中仅 10 分钟就有助于我们的心理健康。该研究还表示,在自然环境中与他人共度时光有助于建立人际关系。即使在城市公园和园艺中也可以有所作为。香港城市大学的一项研究发现,大自然增加了我们将他人视为“完全的人”的方式。研究人员表示,这使我们更多地帮助和合作他人。我们变得更善于交际。这让我们对自己感觉更好。我们感觉更积极,因此我们的心理健康得到了改善。帮助他人也可以减轻我们的压力和焦虑。

心理健康是一个在世界范围内日益增长的问题。越来越多的人患有焦虑、抑郁和其他心理障碍。美国全国精神疾病联盟报告称,五分之一的美国人有心理健康问题。该研究包含关于大自然如何帮助解决这些问题的好建议。它说,在树上或田野里度过的时间与更好的睡眠和注意力的提高有关。日本千叶大学的一项研究发现,即使是鲜花也对心理健康有积极影响。研究人员发现,办公桌上放着一瓶玫瑰的员工在短短四分钟后就变得更加平静,压力也减轻了。

Tip

在维护部门内部的API库时,出现执行命令报错,如下所示:

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

“上兵伐谋,其次伐交,其次伐兵,其下攻城。”