在一个从左到右从上到下都是递增的m*n的矩阵中找一个数x

来源:互联网 发布:目录显示源码 编辑:程序博客网 时间:2024/06/06 01:40

2.【附加题】–一个m*n的矩阵,从左到右从上到下都是递增的,给一个数x,判断x是否在矩阵中。要求效率尽可能的高。

#include<iostream>#include<cassert>using namespace std;bool Find(int* arr,int row,int col, int x){    if (arr==NULL)    {        return false;    }    int RowTmp=0;//变化的行    int ColTmp=col-1;//变化的列    while(RowTmp<row&&col>=0)    {        int tmp=arr[col*RowTmp+ColTmp ];        //1.如果正好相等,则返回真        if (tmp==x)        {            return true;            break;        }        //2.如果不相等,则要去除一行或者一列        else        {            //2.1如果比要查的数字小,说明第一行数字都比要查的小,除去第一行            if (tmp>x)            {                ColTmp--;            }            //2.2如果比要查的数字大,说明第一列数字都比要查的大,除去第一列            else            {                RowTmp++;            }        }    }    return  false;} int main(){    //行数可以省略,列数一定不能省略    int arr[][4]={                 {1,2,8,9},                 {2,4,9,12},                 {4,7,10,13},                 {6,8,11,15}                 };    cout<<Find((int*)arr,4,4,15)<<endl;//二维数组名做实参,可以转化为一位数组,使用强制类型转换,形参用一级指针接收    cout<<Find((int*)arr,4,4,1)<<endl;    cout<<Find((int*)arr,4,4,9)<<endl;    cout<<Find((int*)arr,4,4,100)<<endl;    cout<<Find((int*)arr,4,4,0)<<endl;    cout<<Find((int*)arr,4,4,5)<<endl;    cout<<Find(NULL,4,4,5)<<endl;    return 0;}
阅读全文
0 0