LeetCode 74 Search a 2D Matrix

本文介绍了一种高效的算法用于在特定属性的二维矩阵中搜索值,该算法利用了矩阵的有序特性,通过二分查找实现时间复杂度为O(log(m*n))的搜索效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

  • Integers in each row are sorted from left to right.
  • The first integer of each row is greater than the last integer of the previous row.

For example,

Consider the following matrix:

[
  [1,   3,  5,  7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]
]

Given target = 3, return true.

思路:矩阵的每一行的最小数据也大于前一行的最大数据,就是任何数据都大于前一行的所有数据。因此可以把矩阵按行顺序展开,数据递增排序,二分查找即可。展开后,第k个位置的数据,在矩阵中的位置为:matrix[k/ n][k % n],n代表矩阵的总列数。时间复杂度为O( log(m*n) )

	public boolean searchMatrix(int[][] matrix, int target) {
		if (matrix.length == 0) return false;
		int m = matrix.length, n = matrix[0].length;
		int low = 0, hight = m * n;
		while (low < hight) {
			int mid = low + (hight - low) / 2;
			int vlaue = matrix[mid / n][mid % n];
			if (vlaue == target) return true;
			else if (vlaue < target) low = mid + 1;
			else hight = mid;
		}
		return false;
	}

更简单,更快的做法,参考LeetCode 240的解法,时间复杂度为O(m+n).

	public boolean searchMatrix2(int[][] matrix, int target) {
		if (matrix.length == 0) return false;
		int m = 0, n = matrix[0].length - 1;
		while (m < matrix.length && n >= 0) {
			int x = matrix[m][n];
			if (target == x) return true;
			else if (target < x) n--;
			else m++;
		}
		return false;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值