leetcode-240.搜索二维矩阵 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
示例2:
输入: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 = 20
输出:false
我的代码:
思路:沿着对角线方向移动,从右上角开始查找,若搜索值小于目标值,则向下一位,如果大于目标值,则向左一位,最终如果移动到左下角还没找到,则不存在
class Solution
{
public:
bool searchMatrix(vector<vector<int>>& matrix, int target)
{
int m = matrix.size();
if (m == 0)
return false;
int n = matrix[0].size();
int i = 0, j = n - 1;
while (i < m && j >= 0)
{
if (matrix[i][j] == target)
return true;
else if (matrix[i][j] > target)
--j;
else
++i;
}
return false;
}
};
涉及知识点:
1.数组
vector:动态数组,是我们最常使用的数据结构之一,用于 O(1) 的随机读取。因为大部分算法的时间复杂度都会大于 O(n),因此我们经常新建 vector 来存储各种数据或中间变量。因为在尾部增删的复杂度是 O(1),我们也可以把它当作 stack 来用。