前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发CSDN,mcf171专栏。
博客链接:mcf171的博客
——————————————————————————————
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.
public class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix.length == 0 ) return false;
int row = 0, m = matrix.length, n=matrix[0].length;
int l = 0, r = m - 1;
if( l != r) {
while( r - l > 1){
int mid = (l+r)/2;
if( matrix[mid][n-1] > target) r = mid;
else if(matrix[mid][n-1] < target) l = mid;
else return true;
}
}
row = matrix[l][n-1] >= target ? l:r;
if(matrix[row][0] > target || matrix[row][n-1] < target) return false;
l = 0; r = n - 1;
while(r - l > 1){
int mid = (l + r) /2;
if(matrix[row][mid] > target) r = mid;
else if(matrix[row][mid] <target) l = mid;
else return true;
}
return matrix[row][l] == target || matrix[row][r] == target;
}
}
本文介绍了一种高效的矩阵搜索算法,用于在一特殊性质的二维矩阵中查找指定数值。该矩阵的每一行从左到右递增排序,并且每行的第一个元素大于前一行的最后一个元素。文章详细解释了算法的实现思路,并提供了完整的Java代码实现。

158

被折叠的 条评论
为什么被折叠?



