/***********************************************************
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,
每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样
的一个二维数组和一个整数,判断数组中是否含有该整数。
************************************************************/
#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二维数组为什么要分段树? 也称为区间树 也称为锦标赛树 用于运行范围总和查询 即给定范围内所有数字的总和 Prefix sum 用于获取范围和查询 如果输入数组不断发生变异,则前缀总和方法效果不佳 当输入频繁...
所谓鞍点是指矩阵中的某个元素在其所在的行是最小的,同时在其所在列是最大的。选择合适的矩阵存储方式。以一个4行5列的矩阵为例,从键盘人已输入20个数据给矩阵赋值,然后判断其中是否存在鞍点。如果存在鞍点,输出...
1.编程实现:对任意一个一维数组,从中找出数组元素的最大值和最小值。 2.编程实现:在给定的字符串中查找满足条件的第一个字符。 3.编程实现:首先任意输入一个大于2且小于10的整数n,再输入一个由n决定的二维...
7.3 在二维排序数组中查找给定值 7.4 在旋转有序数组中查找最小值 7.4.1 数组无重复 7.4.2 数组有重复 7.5 在旋转排序数组中查找指定数字 8. 暴力枚举法 8.1 求集合的子集 8.2 集合的全排列 8.3 在指定树中选择进行...
本程序对对给定的一维数组进行求最大值、最小值、和、平均值、排序、二分查找、有序插入等操作,而且可以从文本文件中读取有效数据进行处理。
所以我们查找的起始点最好从二维数组中的中间的点开始,不过为了方便,我们一般都是选择最左下角的那个点作为起始点,也就是a[array.lenth][0],比它大就往右边走,比它小就往上面走。话不多说,上代码。 function ...
例如,在一维数组[21,46,24,99,57,77,86]中,查找数据元素99,首先从第1个元素21开始进行比较,比较结果与要查找的数据不相等,接着与第2个元素46进行比较,以此类推,当进行到与第4个元素比较时,它们相等,...
并存入一维数组中,接下来调用一系列查找算法对其进行处理。顺序查找只是从头到尾进行遍历。二分查找则是先对数据进行排序,然后利用三个标志,分别指向最大,中间和最小数据,接下来根据待查找数据和中间数据的比较...
查找数组中所有唯一的三元组,其总和为零。 3sum.py - 查找数组中所有唯一的三元组,其总和为零。 first_last_pos_array.py - 找到给定目标值的开始和结束位置。 find_anagram.py - 给定一个字符串 s 和一个非空字符...
查找二维数组中总和最大的行或列 以正弦波顺序打印2D阵列的元素 以螺旋形式打印2D阵列的元素 检查两个字符串是否彼此置换 从适当的字符串中删除连续的重复字符 反转字符串中的每个单词 从适当的字符串中删除所有出现...
二维数组中的查找 从尾到头打印链表 重建二叉树(用前序和中序构建) 从上到下打印二叉树(层序遍历) 用两个栈实现队列 斐波那契数列 旋转数组的最小数字 矩阵中的路径 数值的整数次方 打印从1到最大的n位数 二进制中...
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 ...
实例183 输出二维数组有关值 259 实例184 输出二维数组任一行 任一列值 260 实例185 将若干字符串按照字母 顺序输出 262 实例186 用指向函数的指针比较大小 263 实例187 寻找指定元素的指针 265 实例188 字符串的...
所有对角线都相同的二维数组两个项目篮子,找到数组中最大的范围。 切片窗经典池描述删除 X 列以使其始终升序。 两个指针简单而经典Lintcode533 亚马逊 OA2 TwoSumClosest.py 字符串操作(添加、替换(删除)): ...
按行和按列排序的二维数组中的第 K 个最小元素 | 设置 1(硬) 最大和连续子阵列(中) 铁路/汽车站所需的最少站台数量(中) 找到丢失的数字(简单) 合并两个已排序的数组(简单) 在已排序和旋转的数组中搜索元素...
leetcode ...求一个二维数组的最大数 挑战 16 :star: 确认字符串的结尾并将其与目标字符串进行比较 挑战 17 :star: 使用不同的方法来重复一个字符串 挑战 18 :star: 如果字符串长于给定的最大字符串长度
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 ...
定义一个二维字符数组,通过规律填充,然后输出整个二维数组 日期处理 比如日期差值(求两个日期之间的天数) * 思路:不妨假设第一个日期早于第二个日期,令第一个日期不断加`1天`,直到第一个日期等于第二个日期...
在二维矩阵中搜索 在日志 N 中找到 n^x 多数元素(>N/2 次) 多数元素(>N/3 次) 网格唯一路径 反向对 (Leetcode) 通过 GFG 的拼图(自行搜索) 第4天:(散列) 2 求和问题 4 求和问题 * 最长连续序列 * 总和为 0 ...