《剑指Offer》面试题4:二维数组中的查找

要求:二维数组中的查找

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

测试用例:

  1. 二维数组中包含查找的数字(查找的数字是数组的最大值和最小值;查找的数字介于最大值与最小值之间)
  2. 二维数组中没有查找的数字(查找的是数字大于数组中的最大值;查找的数字小于数组中的最小值;查找的数字位于数组最大值和最小值之间,但数组中没有这个数字)
  3. 特殊输入测试(输入空指针;不合理的数组)

本题考点:

  1. 考查二维数组的理解及编程能力。二维数组在内存中占据连续的空间。在内存中从上到下存储各行元素,在同一行中按照从左到右的顺序存储。因此我们可以根据行号和列号计算出相对于数组首地址的偏移量,从而找到对应的元素。
  2. 考查应聘者分析问题的能力。当应聘这发现问题比较复杂时,能不能通过具体的例子找出其中的规律,是能否解决这个问题的关键所在。这个题目只要从一个具体的二维数组的右上角开始分析,就能找到查找的规律,从而找到解决问题的突破口。

源代码:

/********************************************************************
 * 参数:
 *		matrix:			一个二维整数数组
 *		rows:			数组行数
 *		columns:		数组列数
 *		number:			查找值
 * 返回值:
 *		true:			含有查找值
 *		false:			不含有查找值或输入无效
********************************************************************/
bool Find(int *matrix, int rows, int columns, int number)
{
	bool found = false;

	//无效输入(空指针或列号或行号小于等于0)
	if (nullptr == matrix || rows <= 0 || columns <= 0)
		return found;

	//有效输入
	int row = 0;
	int col = columns - 1;
	while (row < rows && col >= 0)
	{
		if (matrix[row * rows + col] > number)
		{
			--col;
		}
		else if (matrix[row * rows + col] < number)
		{
			++row;
		}
		else
		{
			found = true;
			break;
		}
	}

	return found;
}

参考代码:https://github.com/zhedahht/CodingInterviewChinese2/tree/master/04_FindInPartiallySortedMatrix
自己代码:https://github.com/quinta2019/Offer/tree/master/04_Q_FindInPartiallySortedMatrix

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值