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:
Given target =
解法:
这个二维数组实际上就是一个有序的一维数组(在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;
}
}
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;
}
}
相关文章推荐
- 74. Search a 2D Matrix
- [Microsoft] Search a 2D Matrix
- [Leetcode] Search a 2D Matrix
- [LeetCode]74. Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- CODE 59: Search a 2D Matrix
- Leetcode: Search a 2D Matrix
- [LeetCode] Search a 2D Matrix
- leetcode 74:Search a 2D Matrix
- [LeetCode] Search a 2D Matrix
- leetcode search a 2d matrix
- Leetcode之Search a 2D Matrix 问题
- [C语言][LeetCode][74]Search a 2D Matrix
- Search a 2D Matrix
- 算法 Search a 2D Matrix
- leetcode 74|240. Search a 2D Matrix 1|II
- leecode 解题总结:74. Search a 2D Matrix
- Search a 2D Matrix