在用暴力求解时,从第一行第一列开始查找,查找时按行优先,由于数组向下和向右时递增的,故如果从第一行第一列查找如果target比当前元素大,那么向下走和向右走都是可以的,这样很麻烦,但是如果从左下角或右上角开始查找,问题就变得简单了
,以从左下角开始查找为例,如果当前元素比target大,那么就往上走;如果target比当前元素小,就往右走。如果走出了这个矩阵还没有找到target那么返回false。具体代码如下:
package com.zhumq.lianxi;
public class SearchA2DMatrixII {
//从右上角或者左上角开始,target大了就往下,target小了就往左,直到找到为true后者到达边界为false
public boolean searcha2dmatrixii(int[][] matrix, int target) {
if(matrix.length==0 || matrix[0].length==0) return false;
int i = 0;
int j = matrix[0].length-1;
//从右上角开始
while(i < matrix.length && j >= 0) {
final int x = matrix[i][j];
if(target == x) {
return true;
} else if (x < target) {
++i;
} else {
--j;
}
}
return false;
}
}