📜  从与另一个数组关联的数组中查找最小值(1)

📅  最后修改于: 2023-12-03 15:06:33.357000             🧑  作者: Mango

从与另一个数组关联的数组中查找最小值

在程序开发中,我们经常需要从一个数组中查找最小值。如果这个数组与另一个数组关联,如何才能快速地找到这个最小值呢?本文就为大家介绍一些方法。

方法1:使用循环查找

最朴素的方法是使用循环从头到尾遍历数组,并记录最小值。在数组中查找最小值的代码片段如下:

let array = [1, 2, 3, 4, 5]; // 待查找的数组
let min = array[0]; // 初始化最小值为数组第一个元素

for (let i = 1; i < array.length; i++) {
  if (array[i] < min) {  // 如果当前元素比最小值还小,更新最小值
    min = array[i];
  }
}

console.log(min); // 输出最小值

如果这个数组还与另一个数组关联,可以使用同样的方法查找,只需要在遍历另一个数组时加入判断即可。代码片段如下:

let array1 = [1, 2, 3, 4, 5];  // 待查找的数组1
let array2 = [2, 4, 6, 8, 10]; // 待查找的数组2
let min = array1[0]; // 初始化最小值为数组1的第一个元素

for (let i = 0; i < array1.length; i++) {
  for (let j = 0; j < array2.length; j++) {
    if (array1[i] == array2[j] && array1[i] < min) {  // 如果两个数组中对应元素相等且小于最小值,更新最小值
      min = array1[i];
    }
  }
}

console.log(min); // 输出最小值

这种方法的时间复杂度为O(n^2),效率不高。接下来我们将介绍一些更优秀的方法。

方法2:使用indexOf和Math.min

我们可以使用indexOf方法在另一个数组中查找对应元素,然后使用Math.min方法记录最小值。代码示例如下:

let array1 = [1, 2, 3, 4, 5];  // 待查找的数组1
let array2 = [2, 4, 6, 8, 10]; // 待查找的数组2
let min = Number.MAX_SAFE_INTEGER; // 初始化最小值为最大整数

for (let i = 0; i < array1.length; i++) {
  if (array2.indexOf(array1[i]) > -1) {  // 如果数组2中存在对应元素
    min = Math.min(min, array1[i]);  // 记录最小值
  }
}

console.log(min); // 输出最小值

这种方法的时间复杂度为O(n),比方法1要快很多。但是如果另一个数组很大,indexOf方法的性能也会受到一定影响。

方法3:使用Set

如果另一个数组是一个无序的数组,我们可以先将它转化为Set,然后直接使用Set的has方法进行查找。代码示例如下:

let array1 = [1, 2, 3, 4, 5]; // 待查找的数组1
let array2 = [2, 4, 6, 8, 10]; // 待查找的数组2
let set2 = new Set(array2); // 将数组2转化为Set
let min = Number.MAX_SAFE_INTEGER;  // 初始化最小值为最大整数

for (let i = 0; i < array1.length; i++) {
  if (set2.has(array1[i])) {  // 如果Set2中存在对应元素
    min = Math.min(min, array1[i]); // 记录最小值
  }
}

console.log(min); //输出最小值

这种方法的时间复杂度为O(n),而且与数组2的大小无关。

方法4:使用Array.sort

还有一种方法是使用Array.sort方法排序数组,然后从头到尾遍历数组查找最小值。代码示例如下:

let array1 = [1, 2, 3, 4, 5];  // 待查找的数组1
let array2 = [2, 4, 6, 8, 10]; // 待查找的数组2
let merge = array1.concat(array2); // 合并两个数组
merge.sort(function(a, b) { return a - b }); // 排序

let min = merge[0]; // 最小值即为排序后的第一个元素
console.log(min); //输出最小值

这种方法的时间复杂度为O(nlogn),而且如果有其他需求,例如查找前K小的数,也比较容易实现。

总之,在处理与另一个数组关联的数组中查找最小值时,我们有很多方法可选。在选择方法时,要根据具体情况选择最适合的方法。