`
xitonga
  • 浏览: 583590 次
文章分类
社区版块
存档分类
最新评论

二维数组中查找给定值

 
阅读更多
/***********************************************************
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,
每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样
的一个二维数组和一个整数,判断数组中是否含有该整数。
************************************************************/
#include <stdio.h>
//在二维数组中寻找给定值
bool findValueInMatrix
(int* matrix, int columns, //不使用二维数组做参数是因为这样做需要先知道数组的列数
 int rows, int value)//扩展性小;这里需要注意二维数组与一维数组之间的关系
{
	bool found =false;
	if(matrix != NULL && columns !=0 && rows != 0)//排除参数无效的情况
	{
		int row = 0;
		int column = columns - 1;
		while(row < rows && column >=0 ){
			if(value == matrix[row * columns + column])	//从右上角开始寻找
			{
				found = true;
				break;		//如果找到数值,不要忘记退出循环
			}
			else if(value < matrix[row * columns + column])
				column--;	//如果值小于数组右上角的值,往左寻找
			else	
				row++;		//如果值大于数组右上角的值,往下寻找
		}
	}
	return found;
}
//单元测试
void test(int* matrix, int columns,int rows, int value){
	if(findValueInMatrix(matrix,columns,rows,value) == true)
	{
		printf("Found !\n");
	}
	else
		printf("Not found !\n");
}
//一般情况先找到值
void test1()
{
	int matrix1[3][4] = {{1,2,8,9},{2,4,9,12},{4,7,10,13}};//二维数组表示
	test((int*)matrix1,4,3,7);	//注意二维数组名和一维指针之间的转换
}
//最大情况下发现该值
void test2()
{
	int matrix1[3][4] = {{1,2,8,9},{2,4,9,12},{4,7,10,13}};
	test((int*)matrix1,3,4,13);
}
//最小情况下发现该值
void test3()
{
	int matrix1[3][4] = {{1,2,8,9},{2,4,9,12},{4,7,10,13}};
	test((int*)matrix1,3,4,1);
}
//没有找到该值
void test4()
{
	int matrix1[3][4] = {{1,2,8,9},{2,4,9,12},{4,7,10,13}};
	test((int*)matrix1,3,4,3);
}
//输入是空的
void test5()
{
	//int matrix1[0][0] = NULL;数组不能为空
	test(NULL,0,0,7);
}
int main()
{
	test1();
	test2();
	test3();
	test4();
	test5();
	return 0;
}

==参考剑指offer面试题3

分享到:
评论

相关推荐

    二维数组中的查找

    二维数组中的查找,逐行扫描,行内使用二分查找。最差情况需要扫描所有行,待完善

    leetcode二维数组-segment-tree:段树

    leetcode二维数组为什么要分段树? 也称为区间树 也称为锦标赛树 用于运行范围总和查询 即给定范围内所有数字的总和 Prefix sum 用于获取范围和查询 如果输入数组不断发生变异,则前缀总和方法效果不佳 当输入频繁...

    数据结构课程设计 鞍点等。。。

    所谓鞍点是指矩阵中的某个元素在其所在的行是最小的,同时在其所在列是最大的。选择合适的矩阵存储方式。以一个4行5列的矩阵为例,从键盘人已输入20个数据给矩阵赋值,然后判断其中是否存在鞍点。如果存在鞍点,输出...

    C语言实验报告——数组

    1.编程实现:对任意一个一维数组,从中找出数组元素的最大值和最小值。 2.编程实现:在给定的字符串中查找满足条件的第一个字符。 3.编程实现:首先任意输入一个大于2且小于10的整数n,再输入一个由n决定的二维...

    LeetCode解题总结

    7.3 在二维排序数组中查找给定值 7.4 在旋转有序数组中查找最小值 7.4.1 数组无重复 7.4.2 数组有重复 7.5 在旋转排序数组中查找指定数字 8. 暴力枚举法 8.1 求集合的子集 8.2 集合的全排列 8.3 在指定树中选择进行...

    shuzu_数组_

    本程序对对给定的一维数组进行求最大值、最小值、和、平均值、排序、二分查找、有序插入等操作,而且可以从文本文件中读取有效数据进行处理。

    leetcode走方格起点到终点-javascript-offer::leopard:刷刷题js版-剑指向offer

    所以我们查找的起始点最好从二维数组中的中间的点开始,不过为了方便,我们一般都是选择最左下角的那个点作为起始点,也就是a[array.lenth][0],比它大就往右边走,比它小就往上面走。话不多说,上代码。 function ...

    计算机二级公共基础知识

    例如,在一维数组[21,46,24,99,57,77,86]中,查找数据元素99,首先从第1个元素21开始进行比较,比较结果与要查找的数据不相等,接着与第2个元素46进行比较,以此类推,当进行到与第4个元素比较时,它们相等,...

    查找算法的比较

    并存入一维数组中,接下来调用一系列查找算法对其进行处理。顺序查找只是从头到尾进行遍历。二分查找则是先对数据进行排序,然后利用三个标志,分别指向最大,中间和最小数据,接下来根据待查找数据和中间数据的比较...

    leetcode最大连通域-leetcode:leetcode

    查找数组中所有唯一的三元组,其总和为零。 3sum.py - 查找数组中所有唯一的三元组,其总和为零。 first_last_pos_array.py - 找到给定目标值的开始和结束位置。 find_anagram.py - 给定一个字符串 s 和一个非空字符...

    Competitive-Programming:使用C ++解决的每个编码问题的主列表

    查找二维数组中总和最大的行或列 以正弦波顺序打印2D阵列的元素 以螺旋形式打印2D阵列的元素 检查两个字符串是否彼此置换 从适当的字符串中删除连续的重复字符 反转字符串中的每个单词 从适当的字符串中删除所有出现...

    判断链表是否为回文链表leetcode-Algorithms:Coding_Interviews和Leetcode

    二维数组中的查找 从尾到头打印链表 重建二叉树(用前序和中序构建) 从上到下打印二叉树(层序遍历) 用两个栈实现队列 斐波那契数列 旋转数组的最小数字 矩阵中的路径 数值的整数次方 打印从1到最大的n位数 二进制中...

    数据结构一学期作业(顺序栈,三元组,串,树,邻接表,邻接矩阵,二叉树,等等代码c语言实现)

    2019/10/24 18:28 3,455 算术表达式求值.cpp 2019/12/09 21:30 1,406 邻接矩阵.cpp 2019/10/27 14:38 1,183 链栈.cpp 2019/10/27 14:23 1,123 链队列.cpp 2019/10/18 21:44 1,070 顺序栈.cpp 2019/09/24 14:57 ...

    c语言经典案例

    实例183 输出二维数组有关值 259 实例184 输出二维数组任一行 任一列值 260 实例185 将若干字符串按照字母 顺序输出 262 实例186 用指向函数的指针比较大小 263 实例187 寻找指定元素的指针 265 实例188 字符串的...

    leetcode285-java-PythonSyntax-Leetcode::pick:java语法和LeetCode解决方案

    所有对角线都相同的二维数组两个项目篮子,找到数组中最大的范围。 切片窗经典池描述删除 X 列以使其始终升序。 两个指针简单而经典Lintcode533 亚马逊 OA2 TwoSumClosest.py 字符串操作(添加、替换(删除)): ...

    leetcode2sumc-CipherSchools_Assignment:ciphershcoll和讲座代码的所有分配

    按行和按列排序的二维数组中的第 K 个最小元素 | 设置 1(硬) 最大和连续子阵列(中) 铁路/汽车站所需的最少站台数量(中) 找到丢失的数字(简单) 合并两个已排序的数组(简单) 在已排序和旋转的数组中搜索元素...

    leetcodepython001-Python-Exercise:用于增强Python技能的个人存储库

    leetcode ...求一个二维数组的最大数 挑战 16 :star: 确认字符串的结尾并将其与目标字符串进行比较 挑战 17 :star: 使用不同的方法来重复一个字符串 挑战 18 :star: 如果字符串长于给定的最大字符串长度

    Excel公式与函数大辞典.宋翔(带书签高清文字版).pdf

    1.6.3 创建对多个工作表中相同单元格区域的三维引用 30 1.6.4 更新跨工作簿引用的公式 31 1.7 审核公式 31 1.7.1 使用公式错误检查器 32 1.7.2 定位特定类型的数据 33 1.7.3 追踪单元格之间的关系 33 1.7.4 ...

    程序员刷题judge-PAT:拍

    定义一个二维字符数组,通过规律填充,然后输出整个二维数组 日期处理 比如日期差值(求两个日期之间的天数) * 思路:不妨假设第一个日期早于第二个日期,令第一个日期不断加`1天`,直到第一个日期等于第二个日期...

    leetcode正方体堆叠-DSA-Important:DSA-重要

    在二维矩阵中搜索 在日志 N 中找到 n^x 多数元素(&gt;N/2 次) 多数元素(&gt;N/3 次) 网格唯一路径 反向对 (Leetcode) 通过 GFG 的拼图(自行搜索) 第4天:(散列) 2 求和问题 4 求和问题 * 最长连续序列 * 总和为 0 ...

Global site tag (gtag.js) - Google Analytics