Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
For example,
Consider the following matrix:
[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]
Given target = 3
, return true
.
这是一个杨氏矩阵,即每一行是递增的,每一列也是递增的。根据递增性质,我们对每一行只搜索最后一个数,如果小于target那么前往下一行,如果大于target那么说明在这一行,于是前往前一列,直到找到该数。
class Solution { public: bool searchMatrix(vector<vector<int> > &matrix, int target) { int m = matrix.size(); int n = matrix[0].size(); for(int row = 0, col = n-1; row < m && col >= 0;) { if(matrix[row][col] < target) { row++; } else if(matrix[row][col] > target) { col--; } else return true; } return false; } };
这道题难度是medium,本来我打算先把easy难度的做完在考虑中等难度的。偶然看了七月算法的视频(排序查找实战),受益匪浅,决定对讲过的例题进行巩固消化,于是先把这道题做了,算法思路来源于曹博,学习了!
Leetcode12: Search a 2D Matrix
原文地址:http://blog.csdn.net/u013089961/article/details/45153917