题目:

写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数。
这个矩阵具有以下特性:

  • 每行中的整数从左到右是排序的。
  • 每一列的整数从上到下是排序的。
  • 在每一行或每一列中没有重复的整数。

样例:

考虑下列矩阵:
[
[1, 3, 5, 7],
[2, 4, 7, 8],
[3, 5, 9, 10]
]
给出target = 3,返回 2

思路:

  • 和搜索矩阵I类似,要巧妙的找到右上角数字的特殊性(比它小的数据一定在它左边,比它大的数据一定在它下面),从右上角数据开始循环查找。
  • 矩阵的表示:vector<vector<int>> &matrix
    [[]] : 表示的是1行0列
    [[],[]] :表示的是2行0列
    [] : 表示空矩阵
    [[1,2],[2,3]] : 表示2行2列的矩阵

参考答案:

class Solution {
public:
    /*
     * @param matrix: A list of lists of integers
     * @param target: An integer you want to search in matrix
     * @return: An integer indicate the total occurrence of target in the given matrix
     */
    int searchMatrix(vector<vector<int>> &matrix, int target) {
        // write your code here
        if(matrix.empty())  return 0;
        int i = matrix.size();  //行数
        int j = matrix[0].size();  //列数
        
        int res = 0;
        int m = 0;
        int n = j-1;
        
        while(m<i && n>=0){
            if(matrix[m][n] == target){
                res++;
            }
            if(matrix[m][n] < target){
                m++;
            }
            else{
                n--;
            }
        }
        return res;
    }
};

wydong
40 声望5 粉丝

wyd