您的位置:首页 > 其它

LeetCode OJ算法题(七十四):Search a 2D Matrix

2014-08-27 13:49 253 查看
题目:

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
.
解法:

这个二维数组实际上就是一个有序的一维数组(在C内存结构中),题目的意思是希望先判断taget的所在行,再在改行查找target即可。时间复杂度为O(m+n)

当然因为行列都有序,也可以使用折半查找,其中对于行数的查找可以以A[mid+1]>target>=A[mid]作为找到的条件。这样时间复杂度为O(log(m)+log(n))。

public class No74_Search2DMatrix {
public static void main(String[] args){
System.out.println(searchMatrix(new int[][]{{1},{3}}, 1));
}
public static boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length;
if(m == 0) return false;
int n = matrix[0].length;
if(n == 0) return false;
int i = 0;
while(i< m && matrix[i][0] <= target) i++;
if(i == 0) return false;
int j = 0;
while(j < n && matrix[i-1][j] < target) j++;
if(j<n && matrix[i-1][j] == target) return true;
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 算法