搜索二维矩阵

74. 搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵:

  • 每行中的整数从左到右按非严格递增顺序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false

示例 1:

img

1
2
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

示例 2:

img

1
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {

int i = 0;
int m = matrix.length;
int n = matrix[0].length;

int left = 0;
int right = m-1;
//对第一列进行二分查找
while(left <= right){
int mid = ((right - left) >> 1) + left;
if(matrix[mid][0] == target){
return true;
}
else if(matrix[mid][0] > target){
right = mid - 1;
}else{
left = mid + 1;
}
}
//left最后指向的是二分查找的插入位置,martix[left-1]就是target有可能所在的数组
if(left >= 1 && left <= m ){
return search(matrix[left-1] , target);
}
return false;
}

public boolean search(int[] nums, int target){
int left = 0;
int right = nums.length-1;
while(left <= right){
int mid = ((right - left) >> 1) + left;
if(nums[mid] == target){
return true;
}
else if(nums[mid] > target){
right = mid - 1;
}else{
left = mid + 1;
}
}
return false;
}
}

搜索二维矩阵
http://example.com/2024/03/11/算法/二分查找/6. 搜索二维矩阵/
作者
PALE13
发布于
2024年3月11日
许可协议