LeetCode-74-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.

Example 1:

Input:
matrix = [
  [1,   3,  5,  7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]
]
target = 3
Output: true

Example 2:

Input:
matrix = [
  [1,   3,  5,  7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]
]
target = 13
Output: false

解题思路:将矩阵看成一维数组就行。注意二维坐标和一维坐标之间的转换方法。

  bool searchMatrix(vector<vector<int>>& matrix, int target) {
        while(matrix.size()==0 || matrix[0].size()==0) return false;
        int m = matrix.size();
        int n = matrix[0].size();
        int l = 0;
        int r = m*n-1;
        while(l <= r){
            int mid = l + ( r - l ) /2;
            int data = matrix[mid/n][mid%n];
            if( data == target) return true;
            else if(data < target) l=mid+1;
            else r=mid-1;
        }
        return false;
    }

 

posted on 2019-01-31 20:29  无名路人甲  阅读(74)  评论(0编辑  收藏  举报