You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS实现二进制矩阵中行列最长连续1序列求解

解决二进制矩阵中最长连续1序列问题(行+列方向)

你的原代码已经完成了随机矩阵的生成,但存在两个核心问题:一是只处理了行方向的连续1,完全没覆盖列方向;二是计算连续1长度的逻辑有误(用split('1')拿到的是0的片段,搞反了)。我帮你完善了代码,同时优化了逻辑的可读性和可靠性:

完善后的完整代码

// 获取行列数,默认值设为4,同时转为数字类型避免字符串问题
var cols = parseInt(prompt("input cols", 4));
var rows = parseInt(prompt("input rows", 4));

// 生成随机0/1矩阵
var arr = [];
for (var i = 0; i < rows; i++) {
  arr[i] = [];
  for (var j = 0; j < cols; j++) {
    var rand = Math.round(Math.random() * 1);
    arr[i][j] = rand;
  }
}
console.log("生成的二进制矩阵:");
console.log(arr);

// 封装复用函数:计算一维数组中最长连续1的长度
function getMaxConsecutiveOnes(arr) {
  let maxLength = 0;
  let currentLength = 0;
  for (let num of arr) {
    if (num === 1) {
      currentLength++;
      // 实时更新最大值
      maxLength = Math.max(maxLength, currentLength);
    } else {
      // 遇到0就重置当前连续计数
      currentLength = 0;
    }
  }
  return maxLength;
}

// 1. 遍历所有行,找出行方向的最长连续1
let maxRow = 0;
for (let row of arr) {
  const currentRowMax = getMaxConsecutiveOnes(row);
  maxRow = Math.max(maxRow, currentRowMax);
}

// 2. 遍历所有列,找出列方向的最长连续1
let maxCol = 0;
for (let colIndex = 0; colIndex < cols; colIndex++) {
  // 先提取当前列的所有元素,组成一维数组
  const currentCol = [];
  for (let rowIndex = 0; rowIndex < rows; rowIndex++) {
    currentCol.push(arr[rowIndex][colIndex]);
  }
  const currentColMax = getMaxConsecutiveOnes(currentCol);
  maxCol = Math.max(maxCol, currentColMax);
}

// 取行和列方向的最大值作为最终结果
const longestSequence = Math.max(maxRow, maxCol);
console.log(`最长连续1的序列长度是:${longestSequence}`);

关键优化点说明

  • 复用性函数:把计算连续1长度的逻辑封装成getMaxConsecutiveOnes,行和列的检查都能调用,避免重复代码
  • 列方向处理:通过双重循环提取每一列的元素,转成一维数组后再用统一函数计算最长连续1
  • 可靠的计数逻辑:逐个元素遍历计数,比字符串拆分的方式更稳妥(原代码的字符串转换会引入换行符,导致拆分逻辑出错)
  • 类型转换:把prompt获取的输入转为数字类型,避免后续循环出现字符串索引的问题

内容的提问来源于stack exchange,提问作者Pohorilyi Vladislav Pagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:53:16