剑指Offer第二版 面试题4 二维数组中的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和整数,判断数组中是否含有该整数。

解题思路:从左下角或右上角开始比较,如果要找的number<数组右上角中的数字,则最右一列都可排除无需再找。而后列--,在进行判断,如果number>此时数组中的数字,则此行均可排除,行++。直至找到该数字。

代码如下:


剑指Offer第二版 面试题4 二维数组中的查找_第1张图片

注意一点,二维数组在内存中占据连续的空间,在内存中从上到下存储各行元素,同一行中按照从左到右的顺序存储。因此可根据行号和列号计算出相对于数组首地址的偏移量,从而找到对应的元素。

warning:遍历行列的时候row从0开始,col=cols-1,也就是右上角的数字,比较之后依据大小进行col--或者row++的操作,最终注意row0。

然后写一个主函数,调用上述方法函数。


剑指Offer第二版 面试题4 二维数组中的查找_第2张图片
主函数

定义一个4*4的二维数组,需要注意二维数组的传参方式,这里可以将(int *)data,理解为将二维数组data拉成了一维。

你可能感兴趣的:(剑指Offer第二版 面试题4 二维数组中的查找)