这篇文章主要介绍了C语言面试C++二维数组中的查找示例,文中给出基本能拿下面试官的操作示例,有需要的朋友可以借鉴参考下,希望能够有所帮助
二维数组中的查找
面试题3:
似题:
我做过这个类似的有杨氏矩阵为背景的,实际上是一样的
暴力遍历
二维数组暴力遍历的话时间复杂度为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;
}
动态基点操作
暴力操作肯定拿不下面试官的心,没有思想,应该优化程序,减小时间复杂度
然后把上面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;
}
结果也是不错的
以上就是C语言面试C++二维数组中的查找示例的详细内容,更多关于C++二维数组中的查找的资料请关注编程学习网其它相关文章!
沃梦达教程
本文标题为:C语言面试C++二维数组中的查找示例
基础教程推荐
猜你喜欢
- C++详细实现完整图书管理功能 2023-04-04
- C/C++编程中const的使用详解 2023-03-26
- 如何C++使用模板特化功能 2023-03-05
- C利用语言实现数据结构之队列 2022-11-22
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- C++中的atoi 函数简介 2023-01-05
- 详解c# Emit技术 2023-03-25
- C语言 structural body结构体详解用法 2022-12-06
- C语言基础全局变量与局部变量教程详解 2022-12-31
- 一文带你了解C++中的字符替换方法 2023-07-20