搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
- 每行中的整数从左到右按升序排列。
- 每行的第一个整数大于前一行的最后一个整数。
示例 1:
输入: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] target = 3 输出: true
mark
解决思路:
使用二分查找,m行n列的矩阵matrix共有mn个元素,其中第x个元素对应matrix中位置为[x/n][x%n]。
实现代码如下:
public static boolean searchMatrix(int[][] matrix, int target) { int m = matrix.length; if (m == 0) return false; int n = matrix[0].length; int N = m*n; int l=0,h=N-1; int mid = (l+h)/2; int i,j; while(l<=h) { i = mid/n; j = mid%n; if (matrix[i][j] == target) return true; else if (target>matrix[i][j]) l = mid+1; else h = mid-1; mid = (l+h)/2; } return false; }
posted on 2018-05-18 20:50 Deltadeblog 阅读(250) 评论(0) 编辑 收藏 举报