剑指offer-面试题4-二维数组的查找

在一个二维数组中,每一行都按照从左到右依次递增的顺序排序,每一列都按照从上到下依次递增的顺序排序。完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
这里写图片描述

思路:查找时,先从右上角开始比较。
这里写图片描述

构造测试用例:
思路主要是:分为查找得到和查找不到两种情况。并且这两种情况中,也要对边界及非边界进行测试。

    int key1=15;//测试用例:找得到,最大值
    int key2=1;//测试用例:找得到,最小值
    int key3=9;//测试用例:找得到,介于最大值与最小值之间

    int key4=16;//测试用例:找不到,最大值
    int key5=0;//测试用例:找不到,最小值
    int key6=5;//测试用例:找不到,介于最大值与最小值之间

代码如下:

#define ROW 4
#define COL 4
int Find_Key(int* arr,int key)
{
    if(arr==NULL)
    {
        return -1;
    }
    int row=0;//0
    int col=COL-1;//3
    while(row<ROW&&col>=0)
      {
        if(arr[row*COL+col]<key)
        {
            ++row;
        }
        else if(arr[row*COL+col]>key)
        {
            --col;
        }
        else
        {
            return 1;
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/mxrrr_sunshine/article/details/80159680