240. Search a 2D Matrix II

Leetcode

https://leetcode.com/problems/search-a-2d-matrix-ii/arrow-up-right

題目

Write an efficient algorithm that searches for a target value in an m x n integer matrix. The matrix has the following properties:

  • Integers in each row are sorted in ascending from left to right.

  • Integers in each column are sorted in ascending from top to bottom.

解答

  • 方法一

先用 binary search 找出小於 target 並且最接近其的 row, col 位置,再依序往右、往上尋找 target 是否存在

var searchMatrix = function (matrix, target) {
  const m = matrix.length;
  const n = matrix[0].length;
  const binarySearch = () => {
    let startRow = 0;
    let endRow = m - 1;
    while (startRow < endRow) {
      const mid = Math.ceil((startRow + endRow) / 2);
      if (matrix[mid][0] <= target) {
        startRow = mid;
      } else {
        endRow = mid - 1;
      }
    }

    let startCol = 0;
    let endCol = n - 1;
    while (startCol < endCol) {
      const mid = Math.ceil((startCol + endCol) / 2);
      if (matrix[startRow][mid] <= target) {
        startCol = mid;
      } else {
        endCol = mid - 1;
      }
    }
    return {
      row: startRow,
      col: startCol
    };
  };

  let { row, col } = binarySearch();
  while (row >= 0 && col < n) {
    if (matrix[row][col] === target) return true;
    if (matrix[row][col] < target) col++;
    if (matrix[row][col] > target) row--;
  }
  return false;
};

Runtime: 724 ms, faster than 49.85% of JavaScript online submissions for Search a 2D Matrix II.

Memory Usage: 43.8 MB, less than 11.52% of JavaScript online submissions for Search a 2D Matrix II.

  • 方法二

單純由左下角開始,往右往上尋找 target 是否存在

Runtime: 579 ms, faster than 59.77% of JavaScript online submissions for Search a 2D Matrix II.

Memory Usage: 41.6 MB, less than 93.29% of JavaScript online submissions for Search a 2D Matrix II.

測資

參考資料

Last updated