在 JavaScript 中查找矩阵中的幸运数字

javascriptweb developmentfront end technology

在给定的问题陈述中,我们必须借助 Javascript 编写一个函数来获取矩阵中的幸运数字。因此,我们将使用 Javascript 的 for 循环和函数来实现此任务。

理解问题陈述

问题陈述要求我们在给定的矩阵中查找幸运数字。因此,幸运数字将被定义为矩阵中的数字,它是其自身行的最小值和其列的最大值。例如,我们有一个矩阵 [ [3, 7], [9, 11] ],根据幸运数字的条件,这个矩阵中的幸运数字是 [9]。

算法

步骤 1 - 创建一个函数并将其命名为 luckyNumbers,并在函数括号内传递矩阵的参数。

步骤 2 - 遍历给定矩阵的每一行。

步骤 3 - 找到矩阵中每一行的最小元素及其索引。

步骤 4 - 检查最小项的索引是否也是最小元素所在列中最大项的索引。

步骤 5 - 如果情况属实,则最小项就是幸运数字。因此将其存储在数组中。

步骤 6 - 返回幸运数字数组。

算法代码

//函数用于在给定矩阵中查找幸运数字
function luckyNumbers(matrix) {
   const m = matrix.length;
   const n = matrix[0].length;
   const luckyNums = [];
    
   for (let i = 0; i < m; i++) {
      let minIndex = 0;
      for (let j = 1; j < n; j++) {
         if (matrix[i][j] < matrix[i][minIndex]) {
            minIndex = j;
         }
      }
      let maxIndex = 0;
      for (let k = 1; k < m; k++) {
         if (matrix[k][minIndex] > matrix[maxIndex][minIndex]) {
            maxIndex = k;
         }
      }
      if (maxIndex === i) {
         luckyNums.push(matrix[i][minIndex]);
      }
   }
    
   return luckyNums;
}
const matrix = [
   [3, 7, 8],
   [9, 11, 13],
   [15, 16, 17]
];
console.log(luckyNumbers(matrix));

复杂度

实现函数的时间复杂度为 O(m * n),其中 m 是矩阵的行数,n 是矩阵的列数。因为我们对矩阵中的每个元素进行了一次迭代,以找到每行中的最小值和相应列中的最大元素。代码的空间复杂度为 O(k),其中 k 是矩阵中的幸运数字数量。

结论

在函数中,我们迭代矩阵的每一行以找到最小项及其索引,然后检查最小项的索引是否也是最小项所在列中最大项的索引。如果条件为真,则最小项是给定矩阵中的幸运数字。时间复杂度为 O(m * n),空间复杂度为 O(k),这里 k 是矩阵中的幸运数字。


相关文章