一句话思路:从左下角开始找。复杂度是o(m+n)。
一刷报错:
- 应该是一个while循环中有几个条件判断语句,而不是每个条件判断语句里去加while,很麻烦
- 数组越界了。从0开始,y的最大条件应该是<n,不是《n
- 风格上:++ -- 都是一个数字的一元运算,不用加空格
- 超时了。循环体结构:
while (x >= 0 && y <= n) {
if (matrix[x][y] == target) {
count ++;
}
else if (matrix[x][y] > target) {
x --;
}
else if(matrix[x][y] < target) {
y ++;
}
else {
x --;
y ++;
}
}
错误的原因在于:没有意识到这个矩阵可以是不严格单调递增的,在最左一列、最下一行找到后,继续朝右上方找,还有可能找到。
一句话总结:注意不严格单调递增的特点,在边界线上找到后还要继续找。而且还要注意不要数组越界。(有0时写小于号)
class Solution {
public int searchMatrix(int[][] matrix, int target) { if (matrix == null || matrix.length == 0) {
return 0;
}
if (matrix[0] == null || matrix[0].length == 0) {
return 0;
} int m = matrix.length;
int n = matrix[0].length;
int x = m - 1;
int y = 0;
int count = 0; while (x >= 0 && y < n) {
if (matrix[x][y] > target) {
x--;
}
else if(matrix[x][y] < target) {
y++;
}
else {
count++;
x--;
y++;
}
} //if (count > 0) {
// return true;
//}
return count;
}
}