二维数组中的查找

发布于:2022-12-10 ⋅ 阅读:(295) ⋅ 点赞:(0)

在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

[

[1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15]

]

给定 target = 7,返回 true。

给定 target = 3,返回 false。

数据范围:

        矩阵的长宽满足 0≤n,m≤5000 \le n,m \le 5000≤n,m≤500 

        矩阵中的值满足 0≤val≤1090 \le val \le 10^90≤val≤109
进阶:空间复杂度 O(1)

           时间复杂度 O(n+m)

示例1

输入:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]

返回值:true

说明:存在7,返回true

示例2

输入:1,[[2]]

返回值:false

bool Find(int target, int** array, int arrayRowLen, int* arrayColLen ) {
    int i = 0;
    int j = *arrayColLen - 1;
    while (i < arrayRowLen && j >= 0) {
        if (target == array[i][j])
            return true;
        if (target < array[i][j])
            j--;
        else
            i++;
    }
    return false;
}

题目需要求的是二维数组中的某一个数值,我们也可以用双重for循环去写,但是时间复杂度就为O(n^{2}),不符合进阶的O(n+m)

因此我们要用另一种方案~~~

规律题!!! 

首先从题目中发现,我们可以发现输入我们的数组是具有一定的规律的。

 如果单从递增的角度来看的话,就是这个情况。

所以假设从左边到右为 i

从上到下为 j  

如果我们定义查询的点为右上角或者左下角的话,我们可以发现,往左边是递减,往下面是递增。这样我们在判断大小的时候就可以省了很多步骤了。

判断给定的值是 与 定点位的值的大小,决定往哪边走。

下面给出牛客网题目的链接:二维数组中的查找_牛客题霸_牛客网

.......~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.......

这篇文章是用自己理解的想法,又重新写了一遍的,算不上原创,只能说是笨蛋的我用脑子转载了一篇文章。

 

 


网站公告

今日签到

点亮在社区的每一天
去签到