leetcode 74:搜索二维矩阵
74. 搜索二维矩阵
编写一个高效的算法来判断 m x n
矩阵中,是否存在一个目标值。该矩阵具有如下特性:
- 每行中的整数从左到右按升序排列。
- 每行的第一个整数大于前一行的最后一个整数。
示例 1:
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true
示例 2:
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-104 <= matrix[i][j], target <= 104
Related Topics
数组
二分查找
矩阵
思路1:暴力法
直接遍历。
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length;
int n = matrix[0].length;
for(int i = 0 ; i < m;i++){
for(int j = 0 ; j < n;j++){
if(matrix[i][j] == target){
return true;
}
}
}
return false;
}
}
解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:41 MB,击败了25.90% 的Java用户
思路2:二分查找
class Solution {
//二分查找
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length;
int n = matrix[0].length;
int low = 0;
int high = m*n-1;
while(low <= high){
int mid = (high-low)/2 + low;
int num = matrix[mid/n][mid%n];
if(num < target){
low = mid+1;
}else if(num > target){
high = mid -1;
}else{
return true;
}
}
return false;
}
}
解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:41.1 MB,击败了16.10% 的Java用户