题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
输入:
输入可能包含多个测试样例,对于每个测试案例,
输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数。
输入的第二行包括一个整数t(1<=t<=1000000):代表要查找的数字。
接下来的m行,每行有n个数,代表题目所给出的m行n列的矩阵(矩阵如题目描述所示,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
输出:
对应每个测试案例,
输出”Yes”代表在二维数组中找到了数字t。
输出”No”代表在二维数组中没有找到数字t。
样例输入:
3 3
5
1 2 3
4 5 6
7 8 9
3 3
1
2 3 4
5 6 7
8 9 10
3 3
12
2 3 4
5 6 7
8 9 10
样例输出:
Yes
No
No
分析:
采用二分查找法,时间复杂度为O(max(m,n))。先将给定的值key与二维数组右上角的元素比较,若相等,则返回true,若key小于它,则最后一列的元素肯定都大于key,此时可以删除掉最后一列,而若key大于它,则第一行的元素肯定都小于key,此时可以删除掉第一行,依次向下比较,如果比较到了左下角的元素,还没有发现等于key的,则返回fasle。
#include<stdio.h>
#include<stdlib.h>
/*
在rows*columns的升序二维数组matrix中查找是否有key
*/
bool find(int *matrix,int rows,int columns,int key)
{
bool found=false;
if(matrix==NULL||rows<0||columns<0)
return found;
if(matrix!=NULL&&rows>0&&columns>0)
{
int row=0;
int column=columns-1;
while(row<rows&&column>=0)
{
if(matrix[row*columns+column]==key)
{
found=true;
break;
}
else if(matrix[row*columns+column]>key)
--column;
else
++row;
}
}
return found;
}
int main()
{
int m,n;
while(scanf("%d %d",&m,&n)!=EOF)
{
int key,i;
static int matrix[1000*1000]={0};
scanf("%d",&key);
for(i=0;i<m*n;i++)
scanf("%d",matrix+i);
bool res=find(matrix,m,n,key);
if(res)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
输出:
分享到:
相关推荐
java基础面试题二维数组中查找本资源系百度网盘分享地址
在C#编程中,动态二维数组是一种非常重要的数据结构,特别是在处理不定数量的数据或需要灵活扩展数据表的情况下。本文将深入探讨动态二维数组的概念、创建方法、操作技巧以及其在实际编程中的应用。 动态二维数组,...
在C语言中,二维数组是处理表格数据的一种基础方式,它本质上是一组一维数组的集合,每个一维数组代表数组的一行。本编程练习旨在加深对C语言中二维数组、指针和函数的理解,通过实际操作提升编程技能。下面我们将...
搜索字符串二维数组时,我们可能要寻找特定的字符串是否存在于数组中,或者查找包含特定子串的所有行或列。 1. **创建自定义搜索函数**:由于LabVIEW没有内置的二维数组搜索函数,我们需要自定义VI(虚拟仪器)来...
此外,易语言的源码中可能会包含更复杂的二维数组操作,比如数组的遍历、查找、排序等。在易语言资源论坛上,你可以找到许多关于二维数组应用的实例和技巧,这对于提升易语言编程技能非常有帮助。 标签中的"SanYe...
### 基于数组指针实现二维数组中最小值所在行的查找与显示程序 #### 知识点一:理解数组指针与指针数组的区别 在C语言中,数组指针与指针数组有着本质的区别,它们在内存中的表示方式、使用场景以及功能上都存在...
二维数组中的查找,jupter
- **查找和替换**:在二维数组中查找特定值并进行替换,通常需要嵌套循环。 7. **应用场景** - **矩阵运算**:在数学计算、图形处理等场景中,二维数组常用于表示矩阵。 - **游戏开发**:棋盘游戏如围棋、五子棋...
LABVIEW对二维数组的某一个值索引,并检索出所有该值所在的行列数
在Java编程语言中,二维数组可以被用来模拟简单的Map数据结构。Map是一种键值对的集合,其中每个键(Key)都是唯一的,并且与一个值(Value)相关联。尽管Java提供了内置的Map接口(如HashMap、TreeMap等),但有时...
这是一个经典的编程问题,旨在帮助学习者掌握二维数组的基本操作以及如何在数组中进行查找。 #### 二、基本概念 1. **二维数组**: 一种数据结构,可以视为由多个一维数组构成的数组。二维数组通常用来表示矩阵或...
在这个场景下,我们关注的是如何在二维数组中查找特定的值。在`main.js`文件中,可能包含了实现这种查找功能的代码示例。让我们深入探讨一下在JavaScript中处理二维数组以及在其中查找元素的相关知识。 首先,二维...
#### 四、基于指针数组实现二维数组查找最小值所在行的程序分析 下面我们将对给定的部分内容进行详细的解释: ```c #include #define N 5 #define M 4 int* getMinRow(int *p[M], int m) { int *p1, i, j, t, *p2...
二维数组在计算机科学中是表示多维数据结构的重要方式,特别是在C语言中,它被广泛用于处理矩阵和其他表格型数据。鞍点(Saddle Point)是指在一个矩阵中,某一个元素在同一行上比所有其他元素都大,而在同一列上比...
现在我们已经定义了一个二维数组`my2Array`,接下来是向其中插入数据。在循环中,我们创建一个新的`CStringArray`实例`subString`,然后添加元素"1"、"2"和"3"。之后,我们将`subString`添加到主数组`my2Array`中: ...
在二维数组中,我们可以将每个节点看作数组的一个行或列,数组元素的值表示对应节点间边的权重。如果两个节点没有直接相连,权重可以设置为无穷大或者一个非常大的数来表示不可达。 在这个ACM习题中,你可能需要...
剑指Offer(Python多种思路实现):二维数组中的查找 面试4题: 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个...
这些代码可能涉及初始化二维数组、遍历数组、进行矩阵运算(如加法、乘法)、查找特定值、或者实现某种特定算法。 `.dsp`和`.dsw`文件是Visual Studio的老式项目文件,它们存储了关于项目设置、编译选项和依赖关系...
首先,确定二维数组的行数和列数,然后通过循环将一维数组的元素分配到新数组中。这种方法适用于从单列数据构建矩阵或表格的情况。 4. **单列转多列**: 如果有一列数据需要横向扩展为多列,可以通过计算目标列数...