二维数据搜索(算法)

来源:互联网 发布:华为没有网络怎么回事 编辑:程序博客网 时间:2024/06/10 04:39

设计一个算法对m * n矩阵进行搜索,这个矩阵拥有如下属性.

每行的数都是从左到右排序好的。

每行的首数大于上行的尾数。

如下 :

1  2  3  4

5  6  7  8 

9 10 11 12

查找7,返回 true。没有找到的返回-1.


假设映射到一维数据a中,a 有m*n 个元素,那么a[k] = matrix[i][j],当k= i*n+j,即i=k/n,j = k%n,有了这个关系后我们可以用二分查找来解决这个问题。

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


0 0