/**
* 74. 搜索二维矩阵
* @author wsq
* @date 2020/10/06
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
示例 1:
输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
输出: true
示例 2:
输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 13
输出: false
链接:https://leetcode-cn.com/problems/search-a-2d-matrix
*
*/
package search;
public class SearchMatrix {
/**
* 二分查找,一开始做傻逼了,先针对行做二分查找到特定行,然后做列二分查找寻找是否存在元素
* 看完解析就蒙了,整体做二分查找,与一维数组不同的是需要通过索引求得"行索引"与"列索引"
* @param matrix
* @param target
* @return
*/
public boolean searchMatrix(int[][] matrix, int target) {
int n = matrix.length;
if(n == 0){
return false;
}
int m = matrix[0].length;
if(m == 0){
return false;
}
int left = 0;
int right = n * m - 1;
int mid = 0;
while(left <= right){
mid = (left + right) >> 1;
if(matrix[mid / m][mid % m] == target){
return true;
}
if(matrix[mid / m][mid % m] < target){
left = mid + 1;
}else{
right = mid - 1;
}
}
return false;
}
}
74. 搜索二维矩阵
最新推荐文章于 2024-07-05 23:44:18 发布