题解 | #二维数组中的查找#【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,
};




全部评论

相关推荐

字节一直是我的白月光,考虑到转正还是拒了日常实习。
从明天开始狠狠卷JV...:为什么你释放的offer没流到我头上
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
06-11 17:39
门头沟学院 Java
小呆呆的大鼻涕:卧槽,用户彻底怒了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务