240. 搜索二维矩阵 IIhttps://leetcode.cn/problems/search-a-2d-matrix-ii/
编写一个高效的算法来搜索
m x n
矩阵matrix
中的一个目标值target
。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
示例 1:
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5 输出:true
算法思想
二分搜索,由于矩阵相对有序,可以使用二分搜索减小时间复杂度;再遍历每行;
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
for(int[] row:matrix){
int index=search(row,target);
if(index>=0){
return true;
}
}
return false;
}
//二分搜索
public int search(int[] nums, int target){
int low=0,high=nums.length-1;
while(low<=high){
int mid=(high-low)/2+low;
int num=nums[mid];
if(num==target){
return mid;
}
if(num<target){
low=mid+1;
}
if(num>target){
high=mid-1;
}
}
return -1;
}
}
暴力算法
public boolean searchMatrix(int[][] matrix, int target) {
int row=matrix.length,col=matrix[0].length;
HashSet<Integer> set = new HashSet<>();
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
set.add(matrix[i][j]);
}
}
if(set.contains(target)){
return true;
}
return false;
}