描述
写出一个高效的算法来搜索 m × n矩阵中的值 target 。
这个矩阵具有以下特性:
- 每行中的整数从左到右是排序的。
- 每行的第一个数大于上一行的最后一个整数。
样例
样例 1:
输入:
矩阵 = [[5]]
target = 2
输出:
false
解释:矩阵中没有包含2,返回false。
样例 2:
输入:
矩阵 = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
输出:
true
解释:矩阵中包含3,返回true。
用二分查找,比较简单,代码如下
public class Solution {
/**
* @param matrix: matrix, a list of lists of integers
* @param target: An integer
* @return: a boolean, indicate whether matrix contains target
*/
public boolean searchMatrix(int[][] matrix, int target) {
// write your code here
if(matrix==null||matrix.length==0){
return false;
}
int startX = 0;
int endX = matrix.length-1;
int mindleX = -1;
while(startX+1<endX){
mindleX = startX + (endX-startX)/2;
if (matrix[mindleX][0]>target) endX = mindleX;
else startX = mindleX;
}
int X = -1;
if (matrix[startX][0]<=target&&target<matrix[endX][0]) X = startX;
else X = endX;
int startY = 0;
int endY = matrix[X].length-1;
int mindleY = -1;
while(startY+1<endY){
mindleY = startY + (endY-startY)/2;
if (matrix[X][mindleY]>target) endY = mindleY;
else startY = mindleY;
}
if (matrix[X][startY]==target||matrix[X][endY]==target){
return true;
}
return false;
}
}
本文介绍了一种高效的搜索算法,用于在给定的有序矩阵中查找特定值target。通过二分查找策略,结合矩阵的行排序特性,演示了如何在O(log(mn))时间内判断目标值是否存在。
1126

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



