搜索二维矩阵 II
编写一个高效的算法来搜索m x n
矩阵 matrix
中的一个目标值 target
。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
输入: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解题思路:
- 1 遇到这种模拟遍历题目,首先最好定义一个锚点,根据该锚点进行遍历;
- 2 该题由于每行和每列存在顺序,故可以将最左上角当做锚点;
- 2.1 先判断左上角的值是否符合要求,
- 2.2 然后从左到右
- 2.3 从上到下进行遍历判断;
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m = matrix.size(), n = matrix[0].size();
int startx = 0, starty = 0;
while(startx < m && starty < n){
// 锚点元素
if (matrix[startx][starty] == target) return true;
// 锚点右边元素 - 行
for(int i=startx+1; i<n; i++){
if (matrix[starty][i] == target) return true;
}
// 锚点下边元素 - 列
for(int j=starty+1; j<m; j++){
if (matrix[j][startx] == target) return true;
}
startx++;
starty++;
}
return false;
}
};