240. 搜索二维矩阵 II - 力扣(LeetCode)240. 搜索二维矩阵 II - 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: * 每行的元素从左到右升序排列。 * 每列的元素从上到下升序排列。 示例 1:[https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2020/11/25/searchgrid2.jpg]输入: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示例 2:[https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2020/11/25/searchgrid.jpg]输入: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 = 20输出:false 提示: * m == matrix.length * n == matrix[i].length * 1 <= n, m <= 300 * -109 <= matrix[i][j] <= 109 * 每行的所有元素从左到右升序排列 * 每列的所有元素从上到下升序排列 * -109 <= target <= 109https://leetcode.cn/problems/search-a-2d-matrix-ii/description/?envType=study-plan-v2&envId=top-100-liked
编写一个高效的算法来搜索 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示例 2:
输入: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 = 20 输出:false
提示:
m == matrix.length
n == matrix[i].length
1 <= n, m <= 300
-109 <= matrix[i][j] <= 109
-109 <= target <= 109
每一行都是一个从小到大排序的数组,很容易想到二分法。如果对二分法不熟悉可以先做做这个题704.二分查找。
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int rowNum=matrix.length,colNum=matrix[0].length;
//搜索可能的行
for(int i=0;i=matrix[i][0]&&halfSearch(target, matrix[i])){
return true;
}
}
return false;
}
//二分查找
public boolean halfSearch(int target,int[] search){
int left=0,right=search.length-1;
while(left<=right){
int idx=(left+right)/2;
if(targetsearch[idx]){
left=(left+right)/2+1;
}
else{
return true;
}
}
return false;
}
}