[面试] 算法(三) —— 有序二维数组的查找

来源:互联网 发布:winxp系统修复软件 编辑:程序博客网 时间:2024/06/01 13:54

这里的有序二维数组指的是:每一行都是按照从左到右递增,从每一列都是按照从上到下递增的顺序排序。

我们定义如下的查找规律:

首先选取数组中右上角的数字。

  • (1)如果该数字等于要查找的数字,查找过程结束;
  • (2)如果该数字大于要查找的数字,则剔除该数字所在的列;
  • (3)如果该数字小于要查找的数字,则剔除该数字所在的行;
bool Find (int* mat, int rows, int cols, int val){    if (mat != NULL && rows >= 1 && cols >= 1)    {        int row = 0, col = cols - 1;        while (row < row && col >= 0)        {            if (mat[row*cols + col] == val)                return true;            else if (mat[row*cols + col] < val)                ++row;            else                --col;        }    }    return false;}
0 0
原创粉丝点击