算法题:搜索二维矩阵 II
程序员文章站
2022-05-21 16:15:07
...
搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
示例:
现有矩阵 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
。
给定 target = 20
,返回 false
。
思路:此题思路很简单,但是C++新手可能会遇到一个问题,就是如何用下标遍历含有vector的vector。
如:vector<vector<int>> matrix
那么行数:int rows=matrix.size();
列数: int cols=matrix[0].size();
使用行数和列数就可以遍历了。
思路的话没有一定的限制,总而言之就是遍历,我是从右上角开始找,如果目标值大一些,则往下一行找更大的,如果目标小一些,则从右往左找更小的。直到找到相等的返回true,否则返回false。
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.empty())
return false;
int rows=matrix.size();
int cols=matrix[0].size();
int i=0,j=cols-1;
while(i>=0&&i<rows&&j>=0&&j<cols){
if(target==matrix[i][j])
return true;
//从右上角开始找,如果目标值大一些,则往下一行找更大的,如果目标小一些,则从右往左找更小的。
if(target>matrix[i][j])
i++;
else
j--;
}
return false;
}
};
上一篇: 图综合练习--构建邻接表
下一篇: 图综合练习--构建邻接表
推荐阅读