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

/*
题目:二维数组的查找
 在一个二位数组中,每一行都递增,每一列的递增,请完成一个函数,查找二维数组中是否有number
 */

/*
 方案:只需要每次从二维数组的右上角开始查找就可以了,因为如果右上角的数字都大于要查找的number的话,那么这一列肯定都大于number,我们只需要在剩下的列中找就行了,如果右上角的数字小于numner的话,那么这一行我们就不需要判断了,肯定都是小于number的
 */

/*
 测试用例:1.二维数组中含有目标数字,可以是最大值,最小值
 2.二维数组中没有我们要查找的目标值
 3.特殊用例(空指针)
 */
#include <iostream>
using namespace std;
bool Find(int *matrix,int rows,int columns,int number)
{
    bool find=false;
    if(matrix!=nullptr && rows>0 && columns>0)
    {
        int row=0;
        int column=columns-1;
        while(row<rows && column>=0)
        {
            if(matrix[row*columns+column]==number)
            {
                find=true;
                break;
            }
            else if(matrix[row*columns+column]>=number)
            {
                --column;
            }
            else
            {
                ++row;
            }
        }
    }
    return find;
}
int main()
{
    int arr[4][4] {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
    cout<<Find((int *)arr,4,4,7)<<endl;
}

发布了46 篇原创文章 · 获赞 0 · 访问量 445

猜你喜欢

转载自blog.csdn.net/weixin_42226134/article/details/104361654