今天,有个同事提到了把一个一维数组转化为二维数组的算法。他用了两个循环,一个用来初始化结果数组,一个用来把原数组的值填充到结果数组。我觉得,只需一个循环就可以了,说白了,这个转换就是一个映射,就是把一个一维坐标映射为一个二维坐标。
算法:
def div_arr(src_arr,div_len)
if div_len >= src_arr.size
src_arr
end
row_index = -1
result_arr = []
src_arr.each_index{ |i|
column_index = i % div_len
if column_index == 0
row_index += 1
result_arr[row_index] = []
end
result_arr[row_index][column_index] = src_arr[i]
}
result_arr
end
更ruby一点的实现:
def div_arr(arr, div_len)
if div_len <= 0 or div_len == 1 or div_len >= arr.size
return [arr]
end
res = []
arr.each_index{ |i|
x,y = i / div_len,i % div_len
res[x] = [] if not res[x]
res[x][y] = arr[i]
}
res
end
更优雅的,也许是有些风险的:
class Array
def div(len)
if len <= 1 or len >= self.size
return [self]
end
res=[]
self.each_index{ |i|
x,y = i / len, i % len
res[x] = [] if not res[x]
res[x][y] = self[i]
}
res
end
end
分享到:
相关推荐
对于二维数组,img_mask [[ 0 0 0 ..., 7 7 7] [ 0 0 0 ..., 7 7 7] [ 0 0 0 ..., 7 7 7] ..., [266 266 266 ..., ...以上这篇Python实现二维数组输出为图片就是小编分享给大家的全部内容了,希望能给大家一个参
leetcode二维数组搜索leetcode 对于 Leetcode 和其他算法问题 文件描述 2_add_two_numbers.c : 两个数相加 3_solution.c : 无重复字符的最长子串 space_urlencode.c : 在 O(n) space_urlencode.c空间更改为“ ” ./...
有一道算法题题目的意思是在二维数组里找到一个峰值。要求复杂度为n。 解题思路是找田字(四边和中间横竖两行)中最大值,用分治法递归下一个象限的田字。 在用python定义一个二维数组时可以有list和numpy.array两种...
这个算法用一维数组就可以实现了,把数组的每个下标对应一个皇后所在的列位置,这样就可以排除了各个皇后在同一列的可能,此题的思维是这样的,先在queue[0]位置放皇后 看这个数组的值是多少 就是在0列的第几行放...
矩阵类的作用主要有:将二维数组转化为矩阵,矩阵的加法,矩阵的乘法; 变换类的主要方法有:平移变换、旋转变换、缩放变换、错切变换、对称变换,这些变换都是传入相关需要操作的参数来得到要进行的变换的矩阵。 ...
迷宫的存储结构以二维数组来存储,用0,1表示通或不通。表面上似乎迷宫问题是一种特殊问题的解决方法,其实迷宫问题是一种特殊形式图的问题,因此,迷宫总量可转化为图的问题来解决。设计一个计算机程序对任意设定的...
按之字形顺序打印二叉树,把二叉树打印成多行,把数组排成最小的数,把字符串转化成整数,包含min函数的栈,变态青蛙跳,表示数值的字符串,不用加减乘除做加法,丑数,从上往下打印二叉树,从尾到头打印链表,第一个只出现一次...
棋盘:用一个二维数组board[size][size]表示一个棋盘。 子棋盘:子棋盘由棋盘左上角的下标 tr(棋盘上左上角方格的行号)、tc(棋盘上左上角方格的列号)。 特殊方格:用board[dr][dc]表示特殊方格,dr(行号)和dc...
③支持reshape操作,即从一个一维矩阵reshape成二维或三维矩阵。;④支持获取C风格元数据操作,即从Array中获取一个指针,指针内的数据为你矩阵的元数据。 然后再在该Array类的基础上,藉由OJ给出的Z_4_Resources...
二维树状数组 Trie树 二叉查找树 线段树 RMQ LCA+RMQ SB-Tree 数论 生成紧凑素数表 分解质因子 最大公约数 a^b mod n 扩张欧几里德算法 素数表质因子分解 Stirling公式 中国剩余定理 欧拉数(递推法)...
这一方法把搜索区域简化成了一个二维数组。数组的每一个元素是网格 的一个方块,方块被标记为可通过的和不可通过的。路径被描述为从A到B我们经过的方块的集合。一旦路径被找到,我们的人就从一个方格的中心走向另一...
之后,采用基于修正的Marotto定理的新二维离散混沌系统与相对应的一次密文异或的方法,得到三个一维数组;最后,转化为三维数组,得到最终密文图像。通过实验仿真结果得出,与传统的混沌加密算法相比,该算法具有易...
例如,在一维数组[21,46,24,99,57,77,86]中,查找数据元素99,首先从第1个元素21开始进行比较,比较结果与要查找的数据不相等,接着与第2个元素46进行比较,以此类推,当进行到与第4个元素比较时,它们相等,...
1.1.16 一维数组名作为函数参数 57 1.1.17 二维数组名作为函数参数 58 1.1.18 const关键字保护数组内容 58 1.1.19 指针做为函数的返回值 58 1.1.20 指向函数的指针 59 1.1.21 把指向函数的指针做为函数的参数 60 ...
支持以二维数组的形式存储密集数据 支持大量密集数据的块存储 支持DOK形式的稀疏数据存储(键值对字典) 支持double、BigDecimal、String、Object、Complex Numbers等数据类型 支持二维矩阵 支持常用的矩阵操作、如...
一维数组 多维数组 矩阵的压缩存储 广义表 树 存储实现 二叉树 遍历:先序、中序、后序、层次 二叉搜索树 哈夫曼树(赫夫曼树、最优树) 森林转化二叉树 图 连通图 生成树 普里姆算法(Prim算法)求最小生成树 克鲁斯...
地图类(Map): 包含二维数组表示地图格子,每个格子可能是空地、墙壁、箱子、目标位置或者是玩家角色。需要定义移动规则和碰撞检测方法。 角色类(Player): 表示搬运工,具有位置属性和移动方法,只能在空地上...
<br>实验四 综合(课程设计) 内容及步骤: 1、假定一维数组a[n]中的每个元素值均在[0,200]区间内,用C++编写一个算法,分别统计出落在[0,20],[21,50],[51,80],[81,130],[131,200]等各区间内的元素...
基于上述分析,涉及到数据结构的转换,即将二维数组表示的迷宫A转换为以adjlist 类型的邻接表表示的图结构G。在图结构中,将迷宫中的每个方格看作是一个顶点。不可通行的方格都是孤立顶点;相邻的可通行的方格所...
所以利用这一特性,可以用一维数组来存储各个结点,数组中一个元素对应一个结点,数组元素包括树中结点的数据信息以及该结点的双亲在数组中的下标。 其中: Data为数据域,存储树中结点的数据信息; Parent为指针即...