搜索二维矩阵 II

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
  • 每行的元素从左到右升序排列。
  • 每列的元素从上到下升序排列。
示例 1:
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true
解题思路:
  • 1 遇到这种模拟遍历题目,首先最好定义一个锚点,根据该锚点进行遍历;
  • 2 该题由于每行和每列存在顺序,故可以将最左上角当做锚点;
    • 2.1 先判断左上角的值是否符合要求,
    • 2.2 然后从左到右
    • 2.3 从上到下进行遍历判断;
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m = matrix.size(), n = matrix[0].size();
        int startx = 0, starty = 0;
        while(startx < m && starty < n){
            // 锚点元素
            if (matrix[startx][starty] == target) return true;
            // 锚点右边元素 - 行
            for(int i=startx+1; i<n; i++){
                if (matrix[starty][i] == target) return true;
            }
            // 锚点下边元素 - 列
            for(int j=starty+1; j<m; j++){
                if (matrix[j][startx] == target) return true;
            }
            startx++;
            starty++;
        }
        return false;
    }
};