-
Notifications
You must be signed in to change notification settings - Fork 0
/
Searcha2DMatrix.hpp
52 lines (44 loc) · 1 KB
/
Searcha2DMatrix.hpp
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
//Search a 2D Matrix
//
//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.
#include <vector>
class Solution
{
public:
bool searchMatrix(std::vector<std::vector<int>>& matrix, int target)
{
std::size_t rows = matrix.size();
std::size_t cols = matrix[0].size();
int l = 0;
int u = rows*cols - 1;
std::size_t m = 0;
while (l <= u )
{
if (l == u)
return matrix[l / cols][l % cols] == target;
m = (l + u) / 2;
if (matrix[m / cols][m % cols] < target)
l = m + 1;
else if (matrix[m / cols][m % cols] > target)
u = m - 1;
else if (matrix[m / cols][m % cols] == target)
return true;
}
return false;
}
};