/*
题目:二维数组的查找
在一个二位数组中,每一行都递增,每一列的递增,请完成一个函数,查找二维数组中是否有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;
}
剑指offer面试题4:二维数组的查找
猜你喜欢
转载自blog.csdn.net/weixin_42226134/article/details/104361654
今日推荐
周排行