前言:
目前大家对“js两个数组相减怎么做”大致比较关怀,兄弟们都需要了解一些“js两个数组相减怎么做”的相关知识。那么小编在网络上汇集了一些关于“js两个数组相减怎么做””的相关内容,希望小伙伴们能喜欢,小伙伴们一起来学习一下吧!介绍
力科。 开发人员生活中一个不幸的事实是,对于某些工作面试,有必要以特定的方式学习数据结构和算法 (DSA)。 一种期望您编写解决 DSA 问题的解决方案的方法,否则您会在谷歌上搜索它。
我说很不幸,因为在大多数情况下,没有必要以技术面试所需的程度了解他们,而且几乎不能反映实际的工作能力。
但我跑题了,LeetCode 是一个汇集大量不同 DSA 问题的网站。 我将在下个月解决几个 LeetCode 问题,解释并解决它们,以帮助其他人。 它还帮助我重新编写解决方案。
迅速的
给定一个整数数组 nums 和一个整数目标,返回两个数字的索引,使它们相加为目标。
您可能会假设每个输入都只有一个解决方案,并且您可能不会两次使用相同的元素。
您可以按任何顺序返回答案。
示例 1:
Input: nums = [2,7,11,15], target = 9 Output: [0,1] Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
想通了
这是第一个 LeetCode 问题,非常简单。 首先想到的是对数组进行两次迭代并找到必要的总和。 这将 100% 为我们提供解决方案。
但是,你们中的许多人可能都知道这些类型的问题。 通常,仅仅正确是不够的。 对于 DSA 问题,您希望尽可能高效。
因此,例如,我们的第一个解决方案将是这样的:
其中 i 是我们第一次迭代的值,j 是我们第二次迭代的值。 加起来后,我们得到 9,这是我们需要的解决方案。
第一个解决方案
我主要使用 JavaScript,所以解决方案看起来像这样:
const twoSum(nums, target) { for(let i = 0; i < nums.length; i++) { for (let j = 0; j < nums.length; j++) { if(j === i) continue; if((nums[i] + nums[j]) === target) return [i, j]; } } }
nums 是数字数组, target 是所需的解决方案。 我遍历两个数组并检查总和是否是必要的值。 但是,如提示中所述,我们不应两次使用相同的元素。
所以我们可以检查迭代是否在同一个元素上并跳过:
if(j === i) continue;
但是,正如我之前提到的,这是非常未优化的。
第二种解决方案
更好的解决方案是根据当前数字搜索目标。 这意味着什么?
例如,当您第一次开始迭代数组时,您知道要查找的确切数字。 您要查找的数字是目标和当前迭代值相减的结果。
让我们以我们的第一个数组为例。
当我们在第一个元素 2 上时,我们知道我们需要找到 9 减去 2 是 7。但是,我们需要一种快速重新访问数组数据的方法。
引入哈希表。
哈希表
哈希表是一种将键映射到值的数据结构。 这对于我们的用例来说是完美的,因为我们只想将我们的数字映射到我们的索引。
但是我们如何创建这个哈希表呢?
Map 是一个 Javascript 内置对象。 你唯一需要知道的是它拥有键值对并且有一个 API 可以快速检查内容:
.set 用于设置键值对.get 用于根据键获取值.has 用于检查它是否有密钥
第二种解决方案
const hashTable = new Map(); for(let i = 0; i < nums.length; i++) { const num = nums[i]; const substractionWeWant = target - num; if (hashTable.has(substractionGoal) { return [i, hashTable.get(substractionGoal)]; } else { hashTable.set(num, i); } }
我们现在有一种简化的方法来检查以前的值。 回到代码,我们首先对循环进行一次迭代。 通过从当前索引值 num 中减去目标值,我们可以检查余数是否已经存在。 如果不是,我们只需将我们刚刚尝试的值添加到地图并继续前进。
所以重申
我们遍历数组我们检查我们当前的值映射是否减去了我们正在迭代的目标和当前值。 如果是,我们将返回当前值的索引和映射中值的索引如果我们没有找到匹配项,我们将其添加到我们的地图并继续前进
第一个解决方案:
第二种解决方案:
把它包起来
如果你想跟上这个系列,请随时关注我
标签: #js两个数组相减怎么做