70.二维数组中的查找

152 阅读1分钟

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;
};