p74

LeetCode p74 Search a 2D Matrix 题解

1.题目:

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.

For example,

Consider the following matrix:

[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]

Given target = 3, return true.

题意:

二维数组中查找某个数是否存在。

2.解题思路:

二分查找 先纵向再横向

3.代码


[title] [] [url] [link text]
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
 
public class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int n = matrix.length;
if (n < 1)
return false;
int m = matrix[0].length;
if (m < 1)
return false;
int left = 0;
int right = n;
while (left < right) {
int mid = left + (right - left) / 2;
if (matrix[mid][0] == target) {
return true;
}
if (matrix[mid][0] < target) {
left = mid + 1;
} else {
right = mid;
}

}
for (int i = 0; i < left ; i++) {
int l = 0;
int r = m;
while (l < r) {
int mid = l + (r - l) / 2;
if (matrix[i][mid] == target) {
return true;
}
if (matrix[i][mid] < target) {
l = mid + 1;
} else {
r = mid;
}

}
}
return false;
}
}

4.一些总结: