【C/C++练习题】二维数组中查找

《剑指Offer》面试题4

 

1 问题描述

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

 

 

2 分析

按照二维数组元素之间的规律,选择从右上角(或者左下角)的元素开始查找。如果查找值相比元素值大,排除左边数据(一行)
如果查找值相比元素值小,排除下方数据(一列)。这样在每次比较后,都可以缩小查找范围,直到最终找到目标元素。

另外,二维数组在内存上是连续存储的,可以通过数组首地址+偏移量的方式定位数组中的元素。

 

3 代码

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


#include "iostream"

using namespace std;
//函数:查找指定数组
//输入:matrix数组、rows行数、columns列数、number查找的数字
bool Find(int* matrix, int rows, int columns, int number)
{
	if ((matrix == nullptr) || (rows <= 0) || (columns <=0))
	{//判断无效参数
		return false;
	}

	int row = 0;
	int column = columns - 1;
	while (row < rows && column >= 0)
	{//在数组范围内查找
		if (matrix[row*columns + column] == number)
		{//查找到目标
			return true;
		}
		else if (matrix[row*columns + column] < number)
		{//向下继续查找
			row++;
		}
		else
		{//向左继续查找
			column--;
		}
	}
	return false;

}

void test01()
{
    int matrix[][4] = {
    	{1, 2, 8, 9}, 
    	{2, 4, 9, 12}, 
    	{4, 7, 10, 13}, 
    	{6, 8, 11, 15}
    };
    bool ret = Find(&matrix[0][0], 4, 4, 4);

    cout << "result:" << ret << endl;
}

int main(int argc, char const *argv[])
{
	test01();
	return 0;
}

 

全部评论

相关推荐

05-04 09:38
已编辑
门头沟学院 引擎开发
个人9本海硕,本硕期间一直在投游戏相关实习/校招,岗位由客户端-&gt;引擎-&gt;TA-&gt;AIGC。最终目标肯定是独游制作人,所以程序策划美术都点了些,感觉也没谁了。值此春招末尾总结下技术向校招要点,算是回馈牛客社区了。也附上我的Github和个人博客,欢迎各种交流讨论。&nbsp;前言&nbsp;首先是个人惯例的劝退游戏行业。参见缅怀故人&nbsp;和永远有多远&nbsp;,相比于互联网,游戏薪资大概相当但要求更高,加班严重且更为局限。如果你只是带着一腔热情想入这行,建议先找个日常实习了解下真实的游戏行业再做选择。&nbsp;准备&nbsp;当然,在你决定踏出这步后,第一步就是准备相关的笔试面试。这里先建议找到你感兴趣的公司岗位的JD,然后...
牛客28967172...:说的还是有道理的,我校招时就拿到过网易雷火好几个顶级项目组方向的offer,基本上流程和你说的一样。 但本质还是劝退互联网的游戏方向,本质上是代价更高,而且职业生涯容错率很低,方向比较窄。 代价是众所周知的严重加班,游戏大版本赶工基本上通宵无休,甚至国庆五一都没放假是常态。 职业生涯性价比低是因为游戏行业本质上就是赢家通吃,但你要跳槽只有腾讯网易等头部,要么就是米哈游莉莉丝库洛三七等少数中厂,然后就没了,公司是断崖的少 游戏开发相比互联网方向岗位非常非常少,比如网易整个雷火也才五六百人,里面十几个工作室,招人比例非常低,其他游戏公司也是一样。 而且方向也很窄,你做引擎开发就只能跳相关,你做游戏客户端也只能跳相关(游戏客户端都算吃香的,但市场hc也非常非常少,跳槽机会更少),基本上很难转回互联网 这里对比传统互联网,大厂多的都说不过来,而且容错率很大,你做搜索方向可以跳推荐,你做推荐方向可以跳广告,要求远没有游戏行业那么严,甚至你之前干测试都能跳槽研发方向
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务