240. Search a 2D Matrix II&&74. Search a 2D Matrix 都用不严格递增的方法
一句话思路:从左下角开始找。复杂度是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; } }