剑指offer:二维数组查找【每日一题】
程序员文章站
2024-02-21 14:14:45
...
描述
在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增顺序排列。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
测试用例:
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
查找7输出 9,因为9 = 4*2+1 第三行第二列
思路
根据剔除行和列来进行查找,起点右上角或者左下角
如果 该数字大于查找数字,则删除行
如果 该数字小于查找数字,则删除列
终止条件: 行小于length,列大于零(从右上角查找)
代码
#include<stdio.h>
//二维数组假设以行列存储,实际是一维指针
int Find(int *Array,int rowLen,int colLen,int find)
{
if(Array == NULL)
{
return -1;
}
if(rowLen>=0&&colLen>=0)
{
//右上角开始
for(int i=0;i<rowLen;)
{
for(int j=colLen-1;j>=0;)
{
if(Array[i*colLen+j]==find)
return i*colLen+j;
else if(Array[i*colLen+j]>find)
{
j--;
}else
{
i++;
}
if(j==-1)
return -1;
}
}
}
return -1;
}
int main()
{
int array[] = {1,2,8,9
,2,4,9,12
,4,7,10,13
,6,8,11,15};
printf("the position is %d \n",Find(array,4,4,7));
}