一个有效的算法,搜索在MxN矩阵的值。
该矩阵具有的属性:
1)每行中的整数的排序从左至右。
2)每行的第一个整数大于所述前一行的最后一个整数。
例如,考虑下面的矩阵:
[
[1,4,8,9],
[10,11,16,20],
[23,30,34,50]
]
给定的target = 11,则返回true。
public class MyAlg {
public static void main(String[] args) {int [][] matrix = {
{1, 4, 8, 9},
{10, 11, 16, 20},
{23, 30, 34, 50}
};
System.out.println(Solution.searchMatrix(matrix, 3));
}
public static boolean searchMatrix(int[][] matrix,int target){
return help(matrix,target);
}
private static boolean help(int[][] matrix,int target){
//验证
if(matrix == null || matrix.length <= 0 || matrix[0].length == 0){
return false;
}
int m = matrix.length;
int n = matrix[0].length;
int start = 0;
int end = m*n - 1;
while(start <= end){
//获取中间值
int middle = (start+end)/2;
//获取行
int X = middle / n;
//获取列
int Y = middle % n;
//比较当前值
if(matrix[X][Y] == target){
return true;
}
//左右偏移
if(matrix[X][Y] < target){
start = middle + 1;
}else{
end = middle - 1;
}
}
return false;
}
}