题解 | #二维数组中的查找#【js实现】

二维数组中的查找

https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e

1. 暴力解法,两层for循环遍历
function Find(target, array)
{
    // write code here  
    const row = array.length
    const column = array[0].length
    for(let i = 0; i < row; i++) {
        for(let j = 0; j < column; j++) {
            if(array[i][j] === target) {
                return true
            }
        }
    }
    return false
}
module.exports = {
    Find : Find
};
2. 逐行二分,即对二维数组中的每一个元素进行二分查找
function Find(target, array) {
  // write code here
  const row = array.length;
  const column = array[0].length;
  for(let i = 0; i < row; i++) {
      if(binarySearchTarget(target, array[i])) return true
  }
  return false
}
// 二分查找target的方法
function binarySearchTarget(target, array) {
  let l = 0,
    r = array.length - 1;
  while (l <= r) {
    let m = Math.floor(l + (r - l) / 2);
    if (array[m] === target) {
      return true;
    } else if (array[m] > target) {
      // target在左边
      r = m - 1;
    } else {
      // target在右边
      l = m + 1;
    }
  }
  return false;
}
module.exports = {
  Find: Find,
};
3. 从右上角开始查找
- 二维数组中任意一个数字,左边的数字都比它小,下面的数字都比它大。
function Find(target, array) {
  // write code here
  if(array.length === 0) return false
  const row = array.length
  const column = array[0].length
  // 从右上角开始找
  let i = 0, j = column - 1
  while(i <= row - 1 && j >= 0) {
      if(target === array[i][j]) {
          return true
      } else if(target < array[i][j]) {
          // 向左查找
          j--
      } else {
          // 向下查找
          i++
      }
  }
  return false
}

module.exports = {
  Find: Find,
};




全部评论

相关推荐

沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务