给你一个满足下述两条属性的 m x n
整数矩阵:
- 每行中的整数从左到右按非严格递增顺序排列。
- 每行的第一个整数大于前一行的最后一个整数。
给你一个整数 target
,如果 target
在矩阵中,返回 true
;否则,返回 false
。
示例 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
-10^4 <= matrix[i][j], target <= 10^4
我的解答:
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int x_size = matrix[0].length, y_size = matrix.length;
for(int i = 0; i < y_size; i++){
// 找到区间包含目标值的行
if(target == matrix[i][0] || target == matrix[i][x_size - 1]) return true;
if(target > matrix[i][0] && target < matrix[i][x_size - 1]){
int l = 0,r = x_size - 1;
// 在目标行中使用二分法查找目标值
while(l <= r){
int min = (l + r) / 2;
if(target == matrix[i][min]) return true;
if(target > matrix[i][min]){
l = min + 1;
}else{
r = min - 1;
}
}
// 在该行中无目标值,其他行也不会包含目标值,直接退出
break;
}
}
return false;
}
}