給定一個 m x n 矩陣,滿足:
判斷目標值是否存在。注意:與 Matrix I 不同,此處行首不保證大於上行尾。
範例:
matrix = [
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
target = 5 → true
target = 20 → false
從右上角 (0, n-1) 開始:
col--)row++)每步排除一行或一列,最多 m + n 步。時間複雜度:O(m + n),空間複雜度:O(1)。
class Solution {
public:
bool searchMatrix(vector>& matrix, int target) {
if (matrix.empty() || matrix[0].empty()) return false;
int m = matrix.size(), n = matrix[0].size();
int row = 0, col = n - 1; // 右上角起始
while (row < m && col >= 0) {
int val = matrix[row][col];
if (val == target) return true;
else if (val > target) col--; // 排除當前列
else row++; // 排除當前行
}
return false;
}
};
class Solution:
def searchMatrix(self, matrix, target):
if not matrix or not matrix[0]:
return False
m, n = len(matrix), len(matrix[0])
row, col = 0, n - 1
while row < m and col >= 0:
val = matrix[row][col]
if val == target:
return True
elif val > target:
col -= 1
else:
row += 1
return False
這是二維矩陣搜索的經典「階梯搜索」模式,掌握後可解決類似「行列遞增矩陣查找/統計/路徑」問題。