题目要求:
编写一个高效的算法来搜索 m x n
矩阵 matrix
中的一个目标值 target
。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
例一:
输入:
matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true
例二:
输入: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20 输出:false
提示:
m == matrix.length
n == matrix[i].length
1 <= n, m <= 300
-109 <= matrix[i][j] <= 109
- 每行的所有元素从左到右升序排列
- 每列的所有元素从上到下升序排列
-109 <= target <= 109
代码如下:
public class text1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] Martix = new int[][] { { 1, 4, 7, 11, 15 },
{ 2, 5, 8, 12, 19 }, { 3, 6, 9, 16, 22 },
{ 10, 13, 14, 17, 24 }, { 18, 21, 23, 26, 30 } };
System.out.print(searchMartix(Martix, 2));
}
//自定义方法searchMartix;
public static boolean searchMartix(int[][] Martix, int target) {
int h = Martix.length;// 获取行数
int l = Martix[0].length;// 获取列数
int i = h - 1;
int j = 0;
while (i >= 0 || j < l - 1) {
if (target > Martix[i][j]) {
j++;
if (j > l - 1)
return false;
} else if (target < Martix[i][j]) {
i--;
if (i < 0)
return false;
} else if (target == Martix[i][j]) {
return true;
}
}
return false;
}
}