关闭

《剑指offer》:[8]二维数组中的查找

标签: 二维数组的查找剑指offer
230人阅读 评论(0) 收藏 举报
分类:
解决问题:二维数组中的查找:

     二维数组是一个比较常用的数据结构,主要由于其顺序存储,其下标引用的查找和访问的随机性优点尤其突出,使其在O(1)时间内就可以访问我们想要的位置数据。

例如我们想要看第10个的数据内容,那么直接取a[9]就可以了,十分方便。但是它也有缺点,那就是插入和删除时效率较低,正因为其连续存储的数据结构,所以在每次插入和删除后都需要移动大量的数据。所以导致其效率比较低下。

下面主要来讨论一下在二维数组中查找一个数据的方法。
方案一:顺序搜索法。其时间复杂度为O(M*N);M/N分别为数组的行和列,比较低效。代码实现也比较简单,这里不做多的介绍。
方案二:二维法。这是我自己给它取的一个名字,主要是充分利用二维数组的逻辑内存存储方式。利用二维空间来解决,也称“去行去列查找法”,同样自创(可以吐槽,呵呵。。)。
具体条件方法如下:
假设该数组中的数据每行从左到右,每列从上到下,都是递增排列。
首先选取数组右上角的数字,
(1)如果该数字等于要查找的数字,则返回,查找成功;
(2)如果该数字小于查找的数字,去掉该行;
(3)如果该数字大于查找的数字,去掉该列;

循环执行(2)(3),直至查找结束;

我觉得画图更直观,如下图所示:


具体实现代码如下:

#include <iostream>
using namespace std;
int array[4][4]={{1,2,4,6},
				 {2,3,5,7},
			     {5,8,10,15},
				 {7,9,12,23}};
int find_value(int (*arr)[4],int rows,int columns,int findvalue)
{
	int row=0;
	int column=columns-1;
	int count=0;
	if(NULL==arr || rows<=0 ||columns<=0)
		return -1;
	if(NULL!=arr && rows>0 && columns>0)
	{
		while(row<rows && column>=0)
		{
			count++;
			if(arr[row][column]==findvalue)
			//条件也可以变为:if(arr[row*columns+column]==findvalue)
			{//查找成功;
				cout<<"比较次数:"<<count<<endl;
				return findvalue;
			}
			else if(arr[row][column]>findvalue)
			{
				column--;
			}
			else
			{
				row++;
			}
		}
	}
	cout<<"比较次数:"<<endl;
	return 0;  //查找失败!
}
int main()
{
	int result=find_value(array,4,4,8);
	if(-1==result)
		cout<<"数据有误!"<<endl;
	else if(0==result)
		cout<<"查找失败,没有该数据!"<<endl;
	else
		cout<<"查找成功:"<<result<<endl;
	system("pause");
	return 0;
}
运行结果:


从运行结果和图可以看出,查找的次数也为5,。如果按方案一则需要查询10次,效率提高了一倍。如果数据量大,则效果更明显。






0
0

猜你在找
【套餐】Hadoop生态系统零基础入门
【套餐】嵌入式Linux C编程基础
【套餐】2017软考系统集成项目——任铄
【套餐】Android 5.x顶级视频课程——李宁
【套餐】深度学习入门视频课程——唐宇迪
【直播】广义线性模型及其应用——李科
【直播】从0到1 区块链的概念到实践
【直播】计算机视觉原理及实战——屈教授
【直播】机器学习之凸优化——马博士
【直播】机器学习&数据挖掘7周实训--韦玮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:237528次
    • 积分:5348
    • 等级:
    • 排名:第5030名
    • 原创:252篇
    • 转载:17篇
    • 译文:0篇
    • 评论:47条
    博客专栏
    Keep going~
    时间不会因为你的迷茫而停留;
    生活不会因为你的惆怅而改变;
    即使此刻:
    不知有多少人仍在不停的翻动着书页......
    联系
    最新评论