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

把一个一维数组转化成二维数组的算法

    博客分类:
  • ruby
阅读更多
今天,有个同事提到了把一个一维数组转化为二维数组的算法。他用了两个循环,一个用来初始化结果数组,一个用来把原数组的值填充到结果数组。我觉得,只需一个循环就可以了,说白了,这个转换就是一个映射,就是把一个一维坐标映射为一个二维坐标。
算法:
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
分享到:
评论

相关推荐

    Python实现二维数组输出为图片

    对于二维数组,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:C中一些算法问题的解决

    leetcode二维数组搜索leetcode 对于 Leetcode 和其他算法问题 文件描述 2_add_two_numbers.c : 两个数相加 3_solution.c : 无重复字符的最长子串 space_urlencode.c : 在 O(n) space_urlencode.c空间更改为“ ” ./...

    python中字符串变二维数组的实例讲解

    有一道算法题题目的意思是在二维数组里找到一个峰值。要求复杂度为n。 解题思路是找田字(四边和中间横竖两行)中最大值,用分治法递归下一个象限的田字。 在用python定义一个二维数组时可以有list和numpy.array两种...

    八皇后问题的回溯算法的典型例题算法

    这个算法用一维数组就可以实现了,把数组的每个下标对应一个皇后所在的列位置,这样就可以排除了各个皇后在同一列的可能,此题的思维是这样的,先在queue[0]位置放皇后 看这个数组的值是多少 就是在0列的第几行放...

    JAVA 北极星二维变换 矩阵做法

    矩阵类的作用主要有:将二维数组转化为矩阵,矩阵的加法,矩阵的乘法; 变换类的主要方法有:平移变换、旋转变换、缩放变换、错切变换、对称变换,这些变换都是传入相关需要操作的参数来得到要进行的变换的矩阵。 ...

    回溯算法求解迷宫问题

    迷宫的存储结构以二维数组来存储,用0,1表示通或不通。表面上似乎迷宫问题是一种特殊问题的解决方法,其实迷宫问题是一种特殊形式图的问题,因此,迷宫总量可转化为图的问题来解决。设计一个计算机程序对任意设定的...

    剑指offer算法题Python源码带详细思路注释(68道).zip

    按之字形顺序打印二叉树,把二叉树打印成多行,把数组排成最小的数,把字符串转化成整数,包含min函数的栈,变态青蛙跳,表示数值的字符串,不用加减乘除做加法,丑数,从上往下打印二叉树,从尾到头打印链表,第一个只出现一次...

    棋盘覆盖问题

    棋盘:用一个二维数组board[size][size]表示一个棋盘。 子棋盘:子棋盘由棋盘左上角的下标 tr(棋盘上左上角方格的行号)、tc(棋盘上左上角方格的列号)。 特殊方格:用board[dr][dc]表示特殊方格,dr(行号)和dc...

    基于算法和C语言实现的字符画程序【100012991】

    ③支持reshape操作,即从一个一维矩阵reshape成二维或三维矩阵。;④支持获取C风格元数据操作,即从Array中获取一个指针,指针内的数据为你矩阵的元数据。 然后再在该Array类的基础上,藉由OJ给出的Z_4_Resources...

    ACM算法模板和pku代码

    二维树状数组 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个元素比较时,它们相等,...

    C语言讲义.doc

    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 ...

    commons-math3-3.6.1-API文档中文版

    支持以二维数组的形式存储密集数据 支持大量密集数据的块存储 支持DOK形式的稀疏数据存储(键值对字典) 支持double、BigDecimal、String、Object、Complex Numbers等数据类型 支持二维矩阵 支持常用的矩阵操作、如...

    leetcode卡-algorithm_notes:算法学习笔记

    一维数组 多维数组 矩阵的压缩存储 广义表 树 存储实现 二叉树 遍历:先序、中序、后序、层次 二叉搜索树 哈夫曼树(赫夫曼树、最优树) 森林转化二叉树 图 连通图 生成树 普里姆算法(Prim算法)求最小生成树 克鲁斯...

    Java推箱子的设计流程和实现要点

    地图类(Map): 包含二维数组表示地图格子,每个格子可能是空地、墙壁、箱子、目标位置或者是玩家角色。需要定义移动规则和碰撞检测方法。 角色类(Player): 表示搬运工,具有位置属性和移动方法,只能在空地上...

    数据结构(C++)有关练习题

    &lt;br&gt;实验四 综合(课程设计) 内容及步骤: 1、假定一维数组a[n]中的每个元素值均在[0,200]区间内,用C++编写一个算法,分别统计出落在[0,20],[21,50],[51,80],[81,130],[131,200]等各区间内的元素...

    C++数据结构实验漫步迷宫

    基于上述分析,涉及到数据结构的转换,即将二维数组表示的迷宫A转换为以adjlist 类型的邻接表表示的图结构G。在图结构中,将迷宫中的每个方格看作是一个顶点。不可通行的方格都是孤立顶点;相邻的可通行的方格所...

    第五章 树与二叉树

    所以利用这一特性,可以用一维数组来存储各个结点,数组中一个元素对应一个结点,数组元素包括树中结点的数据信息以及该结点的双亲在数组中的下标。 其中: Data为数据域,存储树中结点的数据信息; Parent为指针即...

Global site tag (gtag.js) - Google Analytics