题目:编写一个高效的算法来搜索m*n矩阵中的一个目标值target.该矩阵具有如下特性:
1:每行的元素从左到右升序排列
2:每列的元素从上到下升序排列
package com.company;
/**
* 整个矩阵数据是逐行递增,逐列递增的。所以,行首和列首是最小的,也就是如果判断这一行的行首元素比target大,
* 那么,这一行就可以直接排除了。列首也同样进行如此判断。
*/
public class TestNo9 {
public static void main(String[] args) {
int a[][] = {{1,4,7,11},{2,5,8,12},{3,6,9,16},{10,13,14,17}};
TestNo9 t = new TestNo9();
System.out.println(t.searchMatrix(a,3));
}
public boolean searchMatrix(int[][] matrix, int target) {
//我们从左下角开始,向右上角进行收缩,也可以从右上角开始,向左下角进行收缩。
if(matrix.length == 0){
return false;
}
int i = matrix.length-1; //矩阵的行数
int j = 0;
while (i >=0 && j<matrix[0].length){
if(matrix[i][j] == target){
return true;
}else if(matrix[i][j]<target){
j++; //列增加,向右收缩
} else if(matrix[i][j] > target){
i--; //行减少,向上收缩
}
}
return false;
}
}