【ACM从零开始】LeetCode OJ-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.

题目大意:编写在一个m*n矩阵里快速查找指定元素的算法。这个矩阵有如下属性:1.每一行的元素从左向右递增2.下一行的每个元素比上一行的任意元素都大

解题思路:这就是一个简单的查找问题,用二分法即可。大致过程是先对所有行的尾元素进行二分查找,再对列进行二分查找。但是使用这种方式无法设定查找的结束条件,比如例子中的矩阵,查找“16”这个元素,如果使用二分法则会在第一行去查找,而事实上“16”在第二行,所以这里直接去遍历就好了。

AC代码:

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m = matrix.size();
        int n = matrix[0].size();
        int row = 0; 
        int col = n - 1; 
        while (m > row && col >= 0){ 
            if (target == matrix[row][col]){ 
                return true; 
            } 
            if (target > matrix[row][col]){ 
                row++; 
            }else if (target < matrix[row][col]){ 
                col--;
            } 
        } 
        return false; 
    }
};

posted @ 2015-10-07 14:20  Shvier  阅读(188)  评论(0编辑  收藏  举报