在递增数组中找一个数字

让人瑟瑟发抖的面试题


创新互联专注于成都网站建设、成都网站制作、网页设计、网站制作、网站开发。公司秉持“客户至上,用心服务”的宗旨,从客户的利益和观点出发,让客户在网络营销中找到自己的驻足之地。尊重和关怀每一位客户,用严谨的态度对待客户,用专业的服务创造价值,成为客户值得信赖的朋友,为客户解除后顾之忧。

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

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

#include
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 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<

网站标题:在递增数组中找一个数字
链接URL:http://hxwzsj.com/article/ijoseo.html
Copyright © 2025 青羊区翔捷宏鑫字牌设计制作工作室(个体工商户) All Rights Reserved 蜀ICP备2025123194号-14
友情链接: 成都品牌网站设计 成都网站制作 成都网站建设 手机网站制作 高端品牌网站建设 成都网站建设 成都网站制作 网站建设 响应式网站建设 外贸网站设计方案 成都网站建设 成都网站设计公司 企业网站制作 网站设计 成都网站制作公司 四川成都网站设计 成都网站建设 定制网站设计 网站建设公司 重庆网站建设 教育网站设计方案 成都响应式网站建设