美文网首页数据解构和算法
70.二维数组中的查找

70.二维数组中的查找

作者: wo不是黄蓉 | 来源:发表于2022-03-02 17:54 被阅读0次

    day17: 剑指 Offer 04. 二维数组中的查找(中等)
    思路:

    • 遍历二维数组,使用二分法进行查找目标元素
    • 官方:线性查找。利用二维数组中数据是升序特征,判断每一个数组中的最值是否等于当前元素。
      如果当前行的最大值都不相等,则判断大于还是小于target,大于target则说明当前行中不存在目标元素,移动到下一行;
      小于target则说明当前行中可能存在目标元素,当前行的指针往左移动;
      第一种:
    var findNumberIn2DArray = function (matrix, target) {
      //遍历每个数组,二分法查找元素
      for (let i = 0; i < matrix.length; i++) {
        let tempArr = matrix[i];
        console.log(tempArr);
        if (hasTarget(tempArr, target)) {
          return true;
        }
      }
      return false;
    };
    //查找目标元素-二分法
    hasTarget = function (arr, target) {
      let l = 0,
        r = arr.length - 1;
      while (l <= r) {
        mid = (l + r) >>> 1;
        if (target > arr[mid]) {
          l = mid + 1;
        } else if (target < arr[mid]) {
          r = mid - 1;
        } else {
          return true;
        }
      }
      return false;
    };
    

    第二种:

    var findNumberIn2DArray1 = function (matrix, target) {
      if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
        return false;
      }
      let rows = matrix.length,
        cloumns = matrix[0].length,
        row = 0,
        cloumn = cloumns - 1;
      while (row < rows && cloumn >= 0) {
        //获取到每一行的最后一个元素
        let num = matrix[row][cloumn];
        if (num === target) {
          return true;
        } else if (num > target) {
          //向左移动
          cloumn--;
        } else {
          //向下移动
          row++;
        }
      }
      return false;
    };
    

    相关文章

      网友评论

        本文标题:70.二维数组中的查找

        本文链接:https://www.haomeiwen.com/subject/jqkerrtx.html