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