JavaScript 中两个数组的子集
我们上面问题陈述的目标是使用 Javascript 功能并确定给定的数组是否彼此的子集。因此,使用循环我们可以解决这个问题。
理解问题
问题描述指定我们必须识别给定数组是否另一个数组的子集。或者我们必须检查第二个数组中的所有项是否都存在于第一个数组中。例如,假设我们有一个像 ['a', 'b', 'c', 'd', 'e'] 这样的数组,以及一个第二个数组 ['b', 'd', 'e']。因此,当我们比较这两个数组以检查子集时,结果将为真。因为第二个数组的所有项都存在于第一个数组中。
给定问题的逻辑
为了解决问题,我们将使用 Set 构造函数从第一个数组创建一个集合,并启用 has 方法来检查项目是否存在。接下来,我们将遍历第二个数组并验证每个项目是否存在于集合中。如果找不到该项目,我们将返回 false。如果我们已成功遍历了第二个数组中的所有项目,那么我们将得出结论,它是的第一个数组的子集并返回 true。
算法
步骤 1:使用函数检查给定数组是否另一个数组的子集。然后在函数内部,我们将传递两个数组作为输入。
步骤 2:接下来,从输入数组创建一个集合。
步骤 3:使用循环遍历数组的数组项。
步骤 4:验证条件,如果第一个数组中的当前项目是否存在于第二个数组中。如果条件满足,则返回 true,否则返回 false。
示例
// Function to check for subset of arrays function isArraySubset(arr1, arr2) { const set = new Set(arr1); for (let i = 0; i < arr2.length; i++) { if (!set.has(arr2[i])) { return false; } } return true; } const arr1 = [10, 24, 38, 14, 85]; const arr2 = [24, 14, 85]; const arr3 = [16, 67, 78]; console.log(isArraySubset(arr1, arr2)); console.log(isArraySubset(arr3, arr1));
输出
true false
复杂度
此算法的时间复杂度为 O(n),其中 n 是第二个数组的大小。由于我们使用了“has”方法,其平均时间复杂度为 O(1)。因此,我们在集合中执行了 n 次查找,这就是复杂度导致线性时间的原因。
结论
我们程序中给定的代码有效地确定了一个数组是否使用 Set 是第二个数组的子集。该代码的时间复杂度为 O(n),对于大多数实际场景来说都是一种有效的解决方案。
广告