class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m = matrix.size();
int n = matrix[0].size();
int i = m - 1, j = 0;
while (true) {
if (matrix[i][j] > target) {
i--;
} else if (matrix[i][j] < target) {
j++;
} else {
return true;
}
if (i == -1 || j == n) {
return false;
}
}
return false;
}
};
变式
如果存在重复元素,找最小下标呢?这里所说的最小下标指的是行优先,也就是i越小认为下标越小。
cpp复制代码
class Solution {
public:
vector<int> searchMatrix(vector<vector<int>>& matrix, int target) {
int m = matrix.size();
int n = matrix[0].size();
int i = 0, j = n - 1;
while (true) {
if (matrix[i][j] > target) {
j--;
} else if (matrix[i][j] < target) {
i++;
} else {
int left = target + 1;
if (j - 1 >= 0) {
left = matrix[i][j - 1];
}
if (left == target) {
j--;
} else {
return {i, j};
}
}
if (i == m || j == -1) {
break;
}
}
return {-1, -1};
}
};