Leetcode 74 搜索二维矩阵
2021-12-12 本文已影响0人
itbird01
74. 搜索二维矩阵
题意:编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
解题思路
解法1:
1.分析题意,不管行还是列,数值是递增有序的,因此我们分别对于行和列,进行两次二分查找
2.首先二分查找matrix[0~m-1][0]
满足条件的行的下标,如果没有查找到,则我们知道最终left指向的为第一个大于target的行的下标
3.然后再在行所在列数组matrix[len][0~n-1]
,二分查找是否存在目标值
解题遇到的问题
无
后续需要总结学习的知识点
无
##解法1
class Solution {
int len = 0;
public boolean searchMatrix(int[][] matrix, int target) {
if (isExistLen(matrix, target)) {
return true;
}
if (len < 1 || len > matrix.length) {
return false;
}
return isExist(matrix, target);
}
public boolean isExist(int[][] a, int target) {
int left = 0, right = a[0].length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[len - 1][mid] == target) {
return true;
} else if (a[len - 1][mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return false;
}
public boolean isExistLen(int[][] a, int target) {
int left = 0, right = a.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid][0] == target) {
return true;
} else if (a[mid][0] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
len = left;
return false;
}
}