矩阵

有序二维数组的查找

我只是一个虾纸丫 提交于 2020-03-01 08:46:25
问题描述:在一个二维数组上,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排列。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: /*--> */ /*--> */ 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 查找9时,打印查到了; 查找5时,打印未查到。 分析: 首先选取数组中右上角的数字。如果该数字 等于 要查找的数字, 查到了,列数递减,继续循环 ;如果该数字 大于 要查找的数字, 剔除 这个数字所在 列 ;如果该数字 小于 要查找的数字, 剔除 这个数字所在的 行 。 - ( void)viewDidLoad { [ super viewDidLoad ]; // Do any additional setup after loading the view, typically from a nib. NSArray *array= @[@[@1,@2,@8,@9 ], @[@2,@4,@9,@12 ], @[@4,@7,@10,@13 ], @[@6,@8,@11,@15 ]]; /* 打印原数组 */ NSString *oldArrayStr = @"\n"; for ( int row= 0; row<array. count; row++) { NSArray *oneArray

剑指offer之 二维数组的查找

╄→гoц情女王★ 提交于 2020-03-01 08:44:00
package Problem3; public class Find { /* * 题目描述:二维数组中的查找 * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的顺序排序。 * 完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否包含该整数 * */ public static boolean find(int arr[][],int keyNumber){ //从二维数组的右上角开始选取与keyNumber比较的整数 //column的变化:arr[0].length-1-->0; //row的变化:0-->arr.length; int column=arr[0].length-1; int row=0; while(column>=0&&row<arr.length){ if(arr[row][column]==keyNumber){ return true; } else if(arr[row][column]>keyNumber){ column--; } else { row++; } } return false; } 来源: https://www.cnblogs.com/toov5/p/7654678.html

直接取PHP二维数组里面的值

喜夏-厌秋 提交于 2020-03-01 08:31:31
具体是这样的,如下一个二维数组,是从库中读取出来的。 $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'email' => 'zhangsan@sina.com', ), 1 => array( 'id' => 2, 'name' => '李四', 'email' => 'lisi@163.com', ), 2 => array( 'id' => 5, 'name' => '王五', 'email' => '10000@qq.com', ), ...... ); 上面的数组格式,主要大家玩过 PHP+MYSQL,就肯定非常熟悉了。 那么,现在有这样的两个需求: 1)获取索引"id"的集合,并且保存为一个一 位数组,即得到 array(1,2,5) 不知道各位朋友会怎么写呢? 如果是以前我的写法就是直接 foreach,然后 array_push 一个个的往一个数组变量里塞。这样也能实现。但这样的写法很影响性能,因为使用 PHP 原生的函数肯定比循环效率高。 代码清单: $ids = array(); $ids = array_map( 'array_shift', $user); 如上代码就可以得到我们想要的结果了,关于函数的使用想看手册。 其实这里面还有一种方案,使用 array_column 函数,不过此函数需要

数据结构(十七)数组和矩阵

点点圈 提交于 2020-03-01 06:55:49
  一、数组的定义:数组是n(n>=1)个相同数据类型的数据元素构成的占用一块地址连续的内存单元的有限集合。所有的线性结构(包括线性表、堆栈、队列、串、数组和矩阵)的顺序存储结构实际上就是使用数组来存储。可见,数组是其他数据结构实现存续存储结构的基础,数组这种数据结构是软件设计中最基础的数据结构。   二、数组的实现机制:数组通常以字节为计数单位,同时根据内存单元地址映像公式来分配内存。用高级语言定义数组时,数组在内存中的首地址由系统动态分配并保存。高级语言通常用数组名保存在内存中的首地址。一旦确定了一个数组的首地址,系统就可计算出该数组中任意一个数组元素的内存地址。由于计算数组各个元素内存地址的时间相等,所以存取数组中任意一个元素的时间也相等,通常称具有这种特性的存储结构为随机存储结构。所以说数组具有随机存储结构的特性。   三、在数值分析中,常常会出现一些拥有许多相同数据元素或零元素的高阶矩阵。将具有许多相同元素或者零元素,且数据分布具有一定规律的矩阵称为特殊矩阵,例如,对称矩阵、三角矩阵和对角矩阵。为了节省存储空间,需要对这类矩阵进行压缩存储。压缩存储的原则是:多个值相同的矩阵元素分配同一个存储空间,零元素不分配存储空间。对于对称矩阵、三角矩阵和对角矩阵来说,首先根据矩阵中任意一个元素与压缩后一位数组的下标的对应关系得到每一个数据元素在数组中存储的位置

【数据结构】数组和广义表

自作多情 提交于 2020-03-01 06:55:18
感觉数组这一段没讲什么太多的东西。 先是讲了下定义,就是每个维度上都有对应的前驱后继,首尾元素例外。操作只有初始化 销毁 取元素 修改元素。然后讲了下适合用顺序存储结构,多维情况下根据下标(j1 j2 j3 ... jn)找到对应像素的存储位置 c n = L, c i-1 = b i * c i, LOC = LOC基址 + Σc i j i , L为每个元素存储的单位。 然后给了些实现代码。 新知识是: va_start( , ); va_arg( , ); va_end(); 这三个可以用来处理变长参数表信息。 接着就是讲矩阵了。 首先是特殊矩阵的压缩。对于有规律的特殊矩阵,如对角矩阵、下(上)三角矩阵,对角矩阵。可以根据规律将矩阵存在一维数组中,建立起原始下标与压缩后矩阵下标的对应关系就好。 对没有规律的稀疏矩阵,只存储稀疏矩阵的非0元。需要三元组表存储(行、列、元素值)。根据三元组表的不同表示方式,得到稀疏矩阵不同的压缩存储方法。 ①三元组顺序表 以行序为主序排列。 就是用个数组存起来,行号小的放前面。 讲了下这种结构下转置的操作,关键讲了下如何在转置后以行为主排序。又讲了个快速转置,就是存储了原矩阵每一列首元素的位置和每一列元素个数,这样就不用在之后排序了,直接放在对的位置就好了。 ②行逻辑链接的顺序表,就是把每行第一个非0位置存了起来,为了方便抽取任意一行

二维数组的查找

为君一笑 提交于 2020-03-01 06:04:16
【题目描述】 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 输入描述: array: 待查找的二维数组 target:查找的数字 输出描述: 查找到返回true,查找不到返回false 【解题思路】 分析一个具体的实例,找出如下的规律: 首先选举数组的右上角的数字。如果该数字等于查找的数字,那么查找过程结束,程序返回;如果该数字大于要查找的数字,则删除这个数字所在的列;如果该数字小于要查找的数字,则删除这个数字所在的行。 换言之,如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围剔除一行或者一列,这样每一步都可以缩小查找范围,直到找到需要查找的数字,或者查找范围为空,程序返回。 【代码实现】 来源: https://www.cnblogs.com/lou424/p/5047690.html

PHP二维数组(或任意维数组)转换成一维数组的方法汇总

有些话、适合烂在心里 提交于 2020-03-01 06:03:05
目录 1 array_reduce函数法 2 array_walk_recursive函数法 3 array_map函数法 假设有下面一个二维数组: $user = array( '0' => array('id' => 100, 'username' => 'a1'), '1' => array('id' => 101, 'username' => 'a2'), '2' => array('id' => 102, 'username' => 'a3'), '3' => array('id' => 103, 'username' => 'a4'), '4' => array('id' => 104, 'username' => 'a5'), ); 现在要转换成一维数组,有两种情况: 一种是将指定列转换成一维数组,这在另一篇文章有总结: PHP提取多维数组指定一列的方法大全 。 现在我们重点讲第二种情况,就是把所有的值都转换成一维数组,而且键值相同不会被覆盖,转换后的一维数组是这样的: $result = array(100, 'a1', 101, 'a2', 102, 'a3', 103, 'a4', 104, 'a5'); 主要有下面几个方法。 1 array_reduce函数法 用 array_reduce() 函数是较为快捷的方法: $result = array

剑指offer面试题3二维数组中的查找

笑着哭i 提交于 2020-03-01 06:00:59
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 需要与面试官确认的是,这个二维数组的元素是否存在重复情况,如何处理重复情况。 解题思路: 1.判断待查找整数与矩阵的左上角的最小元素以及右下角的最大元素,如果没在他们之间则直接返回没有找到。 2.选取数组中右上角的数字,如果该数字等于要查找的数字,则查找过程结束; 3.如果该数字大于要查找的数字,则剔除这个数字所在的列; 4.如果该数字小于要查找的数字,则剔除这个数字所在的行。 也就是说:如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一列或者一行,这样每一步都可以缩小查找的范围,直到找到要查找的数字或者查找范围为空。 bool Find(int *matrix, int rows, int columns, int number) { if(number < matrix[0][0] || number > matrix[rows-1][columns-1] ) return false; else { bool found = false; if(matrix != NULL && rows > 0 && columns > 0) { int row = 0; int column =

面试题1:二维数组中查找

冷暖自知 提交于 2020-03-01 05:59:59
《剑指offer》Java版代码全集: https://github.com/wuping5719/Algorithm/tree/master/1-Sword-Offer 本题出自《剑指offer 名企面试官精讲典型编程题》面试题3。 题目3:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列按照从上到下递增的顺序排序。请完成一个函数,输入一个这样的二维数组和整数,判断数组中是否含有该整数。 例如下面的二维数组就是每行每列递增排序。如果在数组中查询7,则返回true;如果查找数字14,由于数组中不包含14,则返回false。 解决方法分析: 首先我们选取二维数组左下角的数字8,由于8大于7,并且8还是第四行的第一个数,因此数字7不可能出现在8所在的行,于是我们把这一行从需要考虑的区域中剔除,之后需要分析的只剩下3行。在剩下的矩阵中,位于左下角的数字是4,4小于7,可以把4所在的列从需要考虑的区域中剔除。接下来只需要分析剩下的3行3列即可。同理,可以照之前处理方式继续处理。 处理过程如下图所示: 注:矩阵灰色区域为下一步要查找的范围,绿色为所要查找的数字。 整个算法的逻辑: 首先选取数组左下角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的行;如果该数字小于要查找的数字,剔除这个数字所在的列。也就是说

面试题2:二维数组中的查找

别等时光非礼了梦想. 提交于 2020-03-01 05:57:56
题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路分析: 从二维数组的右上角的元素开始判断,因为此元素是它所在行的最大数,是它所在的列的最小数。如果它等于要查找的数字,则查找过程结束。如果它大于要查找的数字,则可以排除它所在的列。如果它小于要查找的数字,则可排除它所在的行。这样如果要查找的数字不在数组的右上角,则每次判断都可以排除一行或一列以缩小查找范围,直到找到要查找的数字,或者查找范围为空。 下图是在二维数组中查找7的示意图: 查找功能代码: //在rows行*columns列的二维数组p_nArray中查找nFindNum,找到返回ture, 否则返回false int IsFind(int *p_nArray, int rows, int columns, int nFindNum) { int found=0; if (p_nArray!=NULL && rows>0 && columns>0) { int row = 0; int column = columns - 1; while (row<rows && column>=0) //对于二维数组,行指针加1跳过一行,列指针加1跳过一个元素 { if (*(p_nArray + row