leetcode-240.搜索二维矩阵 II

数组


题目详情

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。


示例1:

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:

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 来用。

posted @ 2022-04-24 16:20  ggaoda  阅读(4)  评论(0编辑  收藏  举报  来源