在递增数组中找一个数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在递增数组中找一个数字相关的知识,希望对你有一定的参考价值。

技术图片让人瑟瑟发抖的面试题


技术图片来我们看一下题目
在一个二维数组中,每一行都按照从左到右递增的顺序操作。每一列都按照从上到下递增的顺序排序。完成代码,输入这样一个二维数组和一个整数,判断数组是否含有该整数

技术图片怎么解决勒???
分析:技术图片如果二维数组是这样,为了解决问题完全可以把数组遍历一遍,但是为了效率,我们需要把时间复杂度降低,为了遍历最少的数字,我们需要把行和列分开。所以,我们会从数组中找一个数字进行判断,然而,随便找一个数字,只会让问题变的跟复杂,比如,找一个10,左边和上边都比10小,而下边和右边都比10大,所以,我们只能找一些特殊点,比如,右上边,左下边,只会有一条路让你选择。a[row][col],我们拿9举例,若所找数字比9大,只需row++;若所找数字比9小,只需col--;直到最后找到所需数字。
技术图片来看看代码

#include<iostream>
using namespace std;

bool find(int *arr, int row, int col, int n)

    bool flag = false;//标记
    if (arr != nullptr&&row > 0 && col > 0)//判断数组是否存在
    
        int _row = 0;
        int _col = col - 1;
        while (_col>0&&_row<row)
        
            if (arr[_row*col + _col] > n)
            
                _col--;
            
            else if (arr[_row*col + _col] < n)
            
                _row++;
            
            else
            
                flag = true;
                return flag;
            
        
    
    return flag;

int main()

    int arr[4][4] =   1, 2, 8, 9 ,  2, 4, 9, 12 ,  4, 7, 10, 13 ,  6, 8, 11, 15  ;
    bool ret=find((int *)arr, 4, 4, 7);//
    cout << boolalpha << ret<<endl;//boolapha使返回值变成true输出
    return 0;

以上是关于在递增数组中找一个数字的主要内容,如果未能解决你的问题,请参考以下文章

杨氏矩阵(二维数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字)

刷题精选:顺时针输出递增数组(螺旋递增升天数组)

刷题精选:顺时针输出递增数组(螺旋递增升天数组)

刷题精选:顺时针输出递增数组(螺旋递增升天数组)

数字问题4:在两个长度相等的数组中找上位数

$add 仅支持数字或日期类型,不支持数组在 Mongoose 中递增时出错