面题3 二维数组的查找

数组在内存中是连续存储的,可以根据下标在O(1)时间内读写任何元素,因此时间效率是很高的。当数组作为函数的参数进行转递时,数组自动退化为同类型的指针。
1、提出问题
	在一个二维数组中,每一行按从左到右递增顺序排序,每一列从上到下。编写一个函数,输入这样一个二维数组,判断数组中是否含有该整数。

2、分析问题
	查找时当所选数组元素小于该数时,则查找范围在所选数的右边或下边,很明显右下的查找元素重复了。我们可选取右上角为基准点,当该数大于查找数,则可以剔除该列。当该数小于查找数时,可以剔除该行。也就是说如果该查找数不位于右上角,则每次可以删除一行或一列,直到找到待查找元素或区域为空。

3、解决问题
根据上面思路,代码如下:
bool Find(int* matrix,int rows,intcolumns,int num)
{
       boolfind=false;
       introw=0;
       intcolumn=columns-1;
       if(matrix!=NULL&&rows>0&&columns>0)
       {
              while(row<rows&&column>=0)
              {
                     if(matrix[row*column+column]==num)
                     {
                            find=true;
                            break;
                     }
                     else
                     {
                            if(matrix[row*column+column]>num)
                                   column--;
                            else
                                   row++;
                     }
              }
       }
       returnfind;
}
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值