Algorithm

本周的算法题为 1534. 统计好三元组

给你一个整数数组 arr ,以及 abc 三个整数。请你统计其中好三元组的数量。

如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组

  • 0 <= i < j < k < arr.length
  • |arr[i] - arr[j]| <= a
  • |arr[j] - arr[k]| <= b
  • |arr[i] - arr[k]| <= c

其中 |x| 表示 x 的绝对值。

返回 好三元组的数量

示例 1

输入arr = [3,0,1,1,9,7], a = 7, b = 2, c = 3
输出4
解释一共有 4 个好三元组[(3,0,1), (3,0,1), (3,1,1), (0,1,1)] 

实现代码如下:

var countGoodTriplets = function (arr, a, b, c) {
    let resultCount = 0
    for (let i = 0; i < arr.length; i++) {
        for (let j = i + 1; j < arr.length; j++) {
            for (let k = j + 1; k < arr.length; k++) {
                if (0 <= i < j < k < arr.length && Math.abs(arr[i] - arr[j]) <= a && Math.abs(arr[j] - arr[k]) <= b && Math.abs(arr[i] - arr[k]) <= c) {
                    ++resultCount
                }
            }
        }
    }
    return resultCount
}

解题思路:

要得到好三元组的数量,要先判断出ijk能有多少种组合,使用3for来遍历,因为0 <= i < j < k < arr.length的条件,可以i0开始,ji+1开始,kj+1开始,依次得出arr[i], arr[j], arr[k]存在的组合,然后使用4个条件进行判断,使用resultCount来计数即可。

Review

Scientists make biocomputer with brain tissue

随着研究人员制造出“生物计算机”,人与机器的融合又向前迈进了一步。美国印第安纳大学的生物工程师将实验室培养的人类脑组织与微电极结合在一起。科学家们将他们的发明命名为Brainoware。它还处于发展的萌芽阶段,但已经可以执行语音识别等复杂任务。首席研究员郭峰博士希望他的软件将有助于推进人工智能技术。这也可能意味着人工智能硬件比单纯使用硅芯片消耗的能源要少得多。郭博士说:“这只是概念验证,表明我们可以完成这项工作。我们还有很长的路要走。”

研究人员表示,他们的Brainware系统利用了“类器官”。这些是人工培育的类似器官的组织束和干细胞。郭博士说,他的团队的类器官就像迷你大脑。它们已经转化并发展了神经元,类似于人类大脑中的神经元。研究人员表示,他们的下一步是研究如何让Brainware适应更高级别的任务。这项技术有一天可以用来创建改进的大脑模型,并推动神经科学研究向前发展。它还可能促进神经系统疾病的治疗。研究人员当前面临的一个主要挑战是找到如何保持活组织存活的解决方案。

Tip

什么是npx?

因为最近在项目Vue3中集成Sentry前端异常监控系统,看到官方文档里有使用npx的指令,就去了解了一下。当你在项目中使用npx执行一个命令时,npx 会在当前项目的的./node_modules/.bin目录下查找是否有对应可执行的命令,没有找到的话再从全局环境查找是否有安装对应的模块,如果全局环境中没有,会创建一个临时目录,并在其中下载对应的模块,命令执行完毕后临时目录会被删除,不会占有本地资源。这种机制可以确保在执行命令时使用最新的模块,并且不会对全局环境造成过多的污染。

Share

  1. 感觉一直在补ARTS的打卡任务,按理这周应该是ARTS Week 11了,不过这周就想补上了,不清楚为什么那么忙,太多太多需要做的事情。
  2. 无论做什么事情,要做就做好,不然就不做。