题目:04. 二维数组中的查找
分析: 根据二维数组的特点,我们发现如果将最后一行或者最后一列的元素与target作比较,可以筛选至少一行或一列的元素,非常高效。
思路: 从右上角开始遍历最后一列,也可从左下角遍历最后一行;
将元素与target相比较: 若相同:则证明包含,返回true;若小于:则证明此行元素均小于target,继续下一行,即i++;若大于:则说明此行元素有可能包含,开始遍历此行,即j--;(由于剩下的几行元素均大于target,自然不用继续再遍历判断了)代码:
class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { //特判 if(matrix == null || matrix.length == 0){ return false; } int rows = matrix.length; int cols = matrix[0].length; int i = 0, j = cols - 1; while(i < rows && j >= 0){ int e = matrix[i][j]; if(e == target){ return true; }else if(e < target){ i ++; }else{ j --; } } return false; } }