`
u010815305
  • 浏览: 28361 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

二维数组中的查找

 
阅读更多
题目描述:

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

输入:

输入可能包含多个测试样例,对于每个测试案例,

输入的第一行为两个整数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基础面试题二维数组中查找

    java基础面试题二维数组中查找本资源系百度网盘分享地址

    二维数组中的查找,jupter

    二维数组中的查找,jupter

    Labview二维数组查重.vi

    LABVIEW对二维数组的某一个值索引,并检索出所有该值所在的行列数

    剑指Offer(Python多种思路实现):二维数组中的查找

    剑指Offer(Python多种思路实现):二维数组中的查找 面试4题: 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个...

    练习题4-二维数组中的查找.cpp

    在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个证书,判断数组中是否含有该整数。C语言完整代码。.cpp格式

    C语言二维数组中的查找的实例

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

    javascrip如何创建二维数组 并解决数组问题(查找字母位置)

    今天我们来探讨一下如何用javascrip在二维数组中查找字母的位置 探讨前我们要先知道在 javascrip 中如何创建二维数组 一、如何创建二维数组 ?_? 0.0首先在我们要先知道,如何定义一个二维数组 我们在java中定义二...

    在嘈杂的二维数组中查找峰值位置附matlab代码.zip

    1.版本:matlab2014/2019a/2021a,内含运行结果,不会运行可私信 2.领域:智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,更多内容可点击博主头像 ...

    labview学习笔记7:labview二维数组搜索匹配

    实际中,经常需要用到对数组的操作,特别是一维数组、二维数组操作,labview中提供了搜索一维数组函数,但是没有提供搜索二维数组。本文章主要实现对字符串二维数组的搜索并返回指定内容。

    C++二维数组中的查找算法示例

    本文实例讲述了C++二维数组中的查找算法。分享给大家供大家参考,具体如下: 一、问题: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的...

    jizeng#gitbook#7.2二维数组的查找1

    7.2 二维数组的查找* 题目:二维数组的查找* 题目描述:指定一个二维数组,其每一行从左到右递增排序,从上到到下也是递增排序。//注意php for 里面的逗

    js代码-二维数组中的查找

    js代码-二维数组中的查找

    二维数组中的查找.md

    二维数组中的查找.md

    python 实现 二维数组中的查找

    python 实现 二维数组中的查找

    二维数组中的查找1

    二维数组中的查找在在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。示例:现有矩阵 matrix 如下:

    基于数组指针实现二维数组中最小值所在行的查找与显示程序

    用于比较指针数组和数组指针实现算法的差异,利用函数返回指针实现。 可作为研究C语言指针使用的范例程序。 有源代码和实现结果图。

    基于指针数组实现二维数组中的查找与显示程序

    用于比较指针数组和数组指针实现算法的差异,利用函数返回指针实现。 可作为研究C语言指针使用的范例程序。 有源代码和实现结果图。

    《剑指Offer》系列一——二维数组中的查找

    二维数组中的查找 题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组...

    Python 二维数组中的查找

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否有该整数。 方法一: ...

Global site tag (gtag.js) - Google Analytics