LeetCode - Search a 2D Matrix

Search a 2D Matrix

2013.12.22 04:30

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.

Solution:

  Since the m x n matrix is sorted, we can think of it as an m * n array. Binary search will solve the problem efficiently.

  Time complexity is O(log2(m * n)), space complexity is O(1).

Accepted code:

 1 // 1AC, yeah~ 2D-address mapping on an array, then done with binary search. 

 2 class Solution {

 3 public:

 4     bool searchMatrix(vector<vector<int> > &matrix, int target) {

 5         // IMPORTANT: Please reset any member data you declared, as

 6         // the same Solution instance will be reused for each test case.

 7         int m, n;

 8         int mn;

 9         

10         m = matrix.size();

11         if(m <= 0){

12             return false;

13         }

14         

15         n = matrix[0].size();

16         if(n <= 0){

17             return false;

18         }

19         

20         mn = m * n;

21         

22         int left, mid, right;

23         left = 0;

24         right = mn - 1;

25         while(right >= left){

26             mid = (left + right) / 2;

27             if(target > matrix[mid / n][mid % n]){

28                 left = mid + 1;

29             }else if(target < matrix[mid / n][mid % n]){

30                 right = mid - 1;

31             }else{

32                 return true;

33             }

34         }

35         

36         return false;

37     }

38 };

 

你可能感兴趣的:(LeetCode)