C语言面试C++二维数组中的查找示例

 更新时间:2021年09月28日 10:43:57   作者:小码农UU  
这篇文章主要介绍了C语言面试C++二维数组中的查找示例,文中给出基本能拿下面试官的操作示例,有需要的朋友可以借鉴参考下,希望能够有所帮助

二维数组中的查找

面试题3:

image-20210910134358545

似题:

我做过这个类似的有杨氏矩阵为背景的,实际上是一样的

暴力遍历

二维数组暴力遍历的话时间复杂度为O(n2)

虽然暴力但是应付学校考试这个就是一把好手

#include<stdio.h>
//const 就是因为二维数组是定死的
int search(const int arr[4][4], int num,unsigned int* prow,unsigned int* pcol)
{
	int i = 0;
	//扫描行
	for (i = 0; i < *prow; i++)
	{
		//扫描列
		int j = 0;
		for (j = 0; j < *pcol; j++)
		{
			//与所查数比较判断,有一样的就直接返回
			if (arr[i][j] == num)
			{
				*prow = i;//把坐标传回去
				*pcol = j;
				return 1;//一次返回,之后就不看了,因为已经证明到有这个数了,没必要在做无用功了
			}
		}
	}
	return 0;
}
int main()
{
	int arr[4][4] = { {1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15} };
	int num = 0;
	while (1)
	{
		unsigned int row = sizeof(arr) / sizeof(arr[0]);
		unsigned int col = sizeof(arr[0]) / sizeof(arr[0][0]);   //把row,col拉进来就是为了每次再来是更新一次
		//长宽,因为下面我们就是用row,col变量没有用其他变量
		printf("请输入你想要找的数:>");
		scanf("%d", &num);
		if (search(arr, num, &row, &col))//把长宽传地址过去用指针prow,pcol接收
		{
			printf("有这个数\n");
			printf("坐标为(%d,%d)\n", row, col);
		}
		else
		{
			printf("没有这个数\n");
		}
	}	
	return 0;
}

image-20210910163325915

动态基点操作

暴力操作肯定拿不下面试官的心,没有思想,应该优化程序,减小时间复杂度

image-20210910165659391

image-20210910170432274

image-20210910170800065

然后把上面search函数改改就可以了

时间复杂度也降为O(n)

#include<stdio.h>
//const 就是因为二维数组是定死的
int search(const int arr[4][4], int num,unsigned int* prow,unsigned int* pcol)
{
	int i = 0;
	unsigned int x = 0;
	unsigned int y = *pcol-1;
	while ((x<*prow)&&(y>=0))
	{
		if (arr[x][y] - num > 0)
		{
			y--;
		}
		else if (arr[x][y] - num < 0)
		{
			x++;
		}
		else
		{
			*prow = x;
			*pcol = y;
			return 1;
		}
	}
	return 0;
}
int main()
{
	int arr[4][4] = { {1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15} };
	int num = 0;
	while (1)
	{
		unsigned int row = sizeof(arr) / sizeof(arr[0]);
		unsigned int col = sizeof(arr[0]) / sizeof(arr[0][0]);   //把row,col拉进来就是为了每次再来是更新一次
		//长宽,因为下面我们就是用row,col变量没有用其他变量
		printf("请输入你想要找的数:>");
		scanf("%d", &num);
		if (search(arr, num, &row, &col))//把长宽传地址过去用指针prow,pcol接收
		{
			printf("有这个数\n");
			printf("坐标为(%d,%d)\n", row, col);
		}
		else
		{
			printf("没有这个数\n");
		}
	}	
	return 0;
}

image-20210910172040278

结果也是不错的

以上就是C语言面试C++二维数组中的查找示例的详细内容,更多关于C++二维数组中的查找的资料请关注脚本之家其它相关文章!

相关文章

  • C语言打印输出杨辉三角

    C语言打印输出杨辉三角

    这篇文章主要为大家详细介绍了C语言打印输出杨辉三角,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • C语言简明清晰讲解枚举

    C语言简明清晰讲解枚举

    枚举法的本质就是从所有候选答案中去搜索正确的解,枚举算法简单粗暴,他暴力的枚举所有可能,尽可能地尝试所有的方法,感兴趣的朋友来看看吧
    2022-05-05
  • 函数外初始化与函数内初始化详细解析

    函数外初始化与函数内初始化详细解析

    函数内初始化:bool FillStr(char *&szDst, int nSize);第一个参数中的&一定不能少,这是因为在函数外部我们只声明了这个指针,具体这个指针指向内存中的哪个地址我们并不知道,所以&是为了说明传递的是这个指针的引用,那么在函数内初始化后这个指针的地址也就是外面指针的地址了
    2013-09-09
  • c语言函数栈帧的创建和销毁过程详解

    c语言函数栈帧的创建和销毁过程详解

    我们知道c语言中函数都是被调用的,main函数里面能调用其他函数,其实main函数也是被别的函数调用的,下面通过本文给大家分享c语言函数栈帧的创建和销毁过程,一起看看吧
    2021-08-08
  • C语言实现简易文本编译器

    C语言实现简易文本编译器

    这篇文章主要为大家详细介绍了C语言实现简易文本编译器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • C++中strcpy函数的实现

    C++中strcpy函数的实现

    strncpy这个可以指定拷贝字符的长度,指定源地址,目标地址,还有需要拷贝的字符的长度; strcpy只能传入两个参数,只指定拷贝的起始地址跟目标地址,然后整体拷贝;
    2015-10-10
  • c++连接mysql入门案例

    c++连接mysql入门案例

    这篇文章主要介绍了c++连接mysql入门案例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • QT+OpenGL实现简单图形的绘制

    QT+OpenGL实现简单图形的绘制

    这篇文章主要为大家详细介绍了如何利用QT和OpenGL实现简单图形的绘制,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2022-12-12
  • C语言简析指针用途

    C语言简析指针用途

    C语言这门课程在计算机的基础教学中一直占有比较重要的地位,然而要想突破C语言的学习,对指针的掌握是非常重要的,本文将具体针对指针的基础做详尽的介绍
    2022-07-07
  • C++实现简单迷宫游戏

    C++实现简单迷宫游戏

    这篇文章主要为大家详细介绍了C++实现简单迷宫游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01

最新评论