-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathsearchMatrix.go
More file actions
52 lines (47 loc) · 1.12 KB
/
Copy pathsearchMatrix.go
File metadata and controls
52 lines (47 loc) · 1.12 KB
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
46
47
48
49
50
51
52
/* https://leetcode.com/problems/search-a-2d-matrix/description/
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.
*/
package lbs
func searchMatrix(matrix [][]int, target int) bool {
m := len(matrix)
switch m {
case 0:
return false
case 1:
start, end := 0, len(matrix[0])-1
for start <= end {
mid := start + (end-start)/2
if matrix[0][mid] == target {
return true
} else if matrix[0][mid] < target {
start = mid + 1
} else {
end = mid - 1
}
}
default:
n := len(matrix[0]) - 1
start, end := 0, m-1
for start <= end {
mid := start + (end-start)/2
if target < matrix[mid][0] {
end = mid - 1
} else if matrix[mid][n] < target {
start = mid + 1
} else {
return searchMatrix([][]int{matrix[mid]}, target)
}
}
}
return false
}