搜索二维矩阵(编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。)

题目要求:

编写一个高效的算法来搜索 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;

	}

}

Guess you like

Origin blog.csdn.net/qq_52253798/article/details/120859425