Skip to content
On this page

74. 搜索二维矩阵

原题链接:LeetCode 74. 搜索二维矩阵

题目描述

给你一个满足下述两条属性的 m x n 整数矩阵:

- 每行中的整数从左到右按非严格递增顺序排列。

- 每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false

示例 1:

**输入:**matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3 **输出:**true

示例 2:

**输入:**matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13 **输出:**false

提示:

- `m == matrix.length`

- `n == matrix[i].length`

- `1 <= m, n <= 100`

-104 <= matrix[i][j], target <= 104

难度: Medium


题解代码

javascript
/**
 * @param {number[][]} matrix
 * @param {number} target
 * @return {boolean}
 */
var searchMatrix = function(matrix, target) {
  let l = 0, r = matrix.length - 1
  while (l < r) {
    const mid = Math.floor(l + (r - l) / 2)
    if (matrix[mid][0] > target) {
      r = mid
    } else if (matrix[mid][matrix[mid].length - 1] < target) {
      l = mid + 1
    } else if (matrix[mid][matrix[mid].length - 1] >= target) {
      l = mid
      break
    }
  }
  let nl = 0, nr = matrix[l].length - 1
  if (matrix[l].length === 1) return matrix[l][0] === target
  while (nl <= nr) {
    const mid = Math.floor(nl + (nr - nl) / 2)
    if (matrix[l][mid] === target) {
      return true
    } else if (matrix[l][mid] < target) {
      nl = mid + 1
    } else {
      nr = mid - 1
    }
  }
  return false
};

技术文档集合