首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何以交替顺序遍历2D数组

以交替顺序遍历2D数组可以使用两个指针分别表示当前行和当前列的位置。首先,初始化两个指针分别指向数组的第一行和第一列。然后,按照以下步骤进行遍历:

  1. 从左到右遍历当前行,输出或处理元素。
  2. 将当前行指针向下移动一行,指向下一行。
  3. 从上到下遍历当前列,输出或处理元素。
  4. 将当前列指针向右移动一列,指向下一列。
  5. 重复步骤1-4,直到遍历完整个数组。

需要注意的是,当指针移动到数组的边界时,需要进行边界判断,避免越界访问。

以下是一个示例代码,以交替顺序遍历2D数组:

代码语言:txt
复制
def alternate_traverse_2d_array(arr):
    rows = len(arr)
    cols = len(arr[0])
    row = 0
    col = 0
    direction = 1  # 1: left to right, -1: top to bottom

    while row < rows and col < cols:
        if direction == 1:
            for i in range(col, cols):
                print(arr[row][i])  # 输出或处理元素
            row += 1
            direction = -1
        else:
            for i in range(row, rows):
                print(arr[i][col])  # 输出或处理元素
            col += 1
            direction = 1

# 示例用法
array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
alternate_traverse_2d_array(array)

这段代码可以按照交替顺序遍历二维数组array,输出元素1, 2, 3, 6, 9, 8, 7, 4, 5

对于这个问题,腾讯云没有特定的产品与之相关。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 剑指Offer题解 - Day12

    从上到下打印二叉树 III」 力扣题目链接[1] 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。...由于正序倒序是交替进行,那么可以通过标志位取反的操作来判断数组如何放置元素。...分析: 通过标志位来决定临时数组放入结果数组中,是正序还是逆序。由此可以达成之字形的打印顺序。 双端队列 方法一是将临时数组遍历完成后,通过奇数偶数行判断来决定是正序还是逆序。...本方法使用数组来模拟双端队列。当是奇数行时,则添加至尾部;当是偶数行时,则添加至头部。相当于提前将临时数组内的顺序进行排列。...因为奇数和偶数是交替出现,所以取反可以达到目的。同样的,我们可以通过判断结果数组result 的长度来区分奇偶行。

    26750

    Leetcode No.103 二叉树的锯齿形层序遍历

    一、题目描述 给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。...二叉树的层序遍历」的变种,最后输出的要求有所变化,要求我们按层数的奇偶来决定每一层的输出顺序。...为了满足题目要求的返回值为「先从左往右,再从右往左」交替输出的锯齿形,我们可以利用「双端队列」的数据结构来维护当前层节点值输出的顺序。 双端队列是一个可以在队列任意一端插入元素的队列。...在广度优先搜索遍历当前层节点拓展下一层节点的时候我们仍然从左往右按顺序拓展,但是对当前层节点的存储我们维护一个变量 revese 记录是从左至右还是从右至左的: 如果从左至右,我们每次将被遍历到的元素插入至双端队列的末尾...如果从右至左,我们每次将被遍历到的元素插入至双端队列的头部。 当遍历结束的时候我们就得到了答案数组

    17620

    二叉树的锯齿形层序遍历

    给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。...二叉树的层序遍历」的变种,最后输出的要求有所变化,要求我们按层数的奇偶来决定每一层的输出顺序。...为了满足题目要求的返回值为「先从左往右,再从右往左」交替输出的锯齿形,我们可以利用「双端队列」的数据结构来维护当前层节点值输出的顺序。 双端队列是一个可以在队列任意一端插入元素的队列。...在广度优先搜索遍历当前层节点拓展下一层节点的时候我们仍然从左往右按顺序拓展,但是对当前层节点的存储我们维护一个变量 \textit{isOrderLeft}记录是从左至右还是从右至左的: 如果从左至右,...如果从右至左,我们每次将被遍历到的元素插入至双端队列的头部。 当遍历结束的时候我们就得到了答案数组

    11910

    【一天一大 lee】二叉树的锯齿形层序遍历 (难度:中等) - Day20201222

    20201222 题目: 给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。...20,9], [15,7] ] 抛砖引玉 关于二叉树的按层遍历之前已经做过类似的题目: 二叉树的层序遍历二叉树的层次遍历 II 广度优先搜索(BFS)按层遍历模板: let _result = [...(清空队列)将队列中节点取出,节点值存放到新数组中, 再将取出的节点的子节点放入队列中。...抛砖引玉 本题中要求遍历顺序,每次顺序与上一次想法,则可以通过已经遍历的层数的奇偶来切换该层元素的排列顺序 /** * Definition for a binary tree node....if (node.right) { queue.push(node.right) } } // 根据已遍历的层数切换元素的排列顺序

    26620

    跟着节奏来,下一个算法大师就是你,此文不容错过

    我要开始写了~~~ 1.1 最小K个数 难度系数: ☆☆☆☆ 题目来源: LeetCode 下分治策略专题 题目描述: 设计一个算法,找出数组中最小的k个数,以任意顺序返回这k个数均可; 输入:arr...实际上这个问题就是今天我们要探讨的算法题,设计一个算法,找出数组中最小的k个数,以任意顺序返回这k个数均可; 这个问题在LeetCode 上"分治策略"题库标签下,实际上使用快速排序就是一种非常典型且明显的分治策略了...还可以继续进行第2次 往中间两端交替向中间扫描; ?...2/2 Partition 函数的思路: 选取第一个关键字作为枢轴; 只要(low < high) 就循环持续的将表的两端进行交替向中间扫描 (两端交替循环) while 遍历从[low,high]的高端位置开始找...,找到比枢轴小的关键字(高位调整循环) 没有找到,则修改范围.

    55020

    算法基础-顺序统计量

    顺序统计量 将长度为 n 的数组升序排序后,则第 i 个位置的数字是该数组的第 i 小的量,称之为第 i 顺序统计量 数组最小值是第1个顺序统计量,最大值是第n个顺序统计量,中位数(又称下中位数)是第⌊...for(int i=1;i<n;i++){ if(a[i] > min) min = a[i]; } 显然这已经是最优的算法了,我们称他为“遍历查找”,因为该算法是简单地遍历了整个数组来寻找最大或最小值...,总共需要(n-1)次比较,即S(n)=n-1 现在我们要研究如何以尽可能低的时间复杂度来同时求出数组的最大值和最小值 传统方法 最容易想到的方法就是重复两次“遍历查找”,分别找出最大和最小值,那么就需要...设存在数组A=[9,0,1,2,100] 在寻找最小值时,当遍历到第2个元素时,由于0<9,所以最小值被替换成0,同时我们也可以得知0一定不是最大值,因为有个9比它更大。...如果想要找到数组里的第 i 顺序统计量,也就是第 i 小的数字,通常的办法是把整个数组排序,然后直接取出对应位置的数字。

    69260

    【LeetCode】动态规划 刷题训练(九)

    最长递增子序列 ---- 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。...示例 2: 输入:nums = [0,1,0,3,2,3] 输出:4 子数组与子序列的区别 子序列:按照从左到右的顺序,任意挑选几个 所组成的新序列 即为子序列 :a b d 为子序列 跳过了...c ,但相对顺序与原数组保持一致(d在原数组中就在a b后,新的数组也是如此) 而 d a b 就不是一个子序列了 子数组:按照从左到右的顺序,任意挑选的必须是连续的 :a b c为子数组 ,但 a...例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。...子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。 给你一个整数数组 nums ,返回 nums 中作为 摆动序列 的 最长子序列的长度 。

    16220

    canvas学习总结四:绘制虚线

    blog.csdn.net/qq_32135281/article/details/73866238 上一章节我们说到,线性路径的绘制,主要利用movoTo(),lineTo()等方法,当然 Canvas 2D...一组描述交替绘制线段和间距(坐标空间单位)长度的数字。 如果数组元素的数量是奇数, 数组的元素会被复制并重复。...从这个例子我们可以看出当我们的参数数组只有一个元素时我们的 “线段与间隔” 是相等的,当参数数组的元素为空时,我们绘制的是一条实线。...ctx.getLineDash() 该方法返回一个 Array数组。一组描述交替绘制线段和间距(坐标空间单位)长度的数字。如果数组元素的数量是奇数,数组元素会被复制并重复。...var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); ctx.setLineDash([5

    1.6K20

    【数据结构】链式家族的成员——循环链表与静态链表

    ,只能是从头结点开始往后进行遍历,但是在循环链表中,我们可以从任意结点往后遍历,用C语言来表示的话我们则可以写成: //循环链表的遍历 bool Ergodic(LNode* p) { assert(...", (a + i)->data); printf("\n打印静态链表的各个元素的游标:>"); for (int i = 0; i < MaxSize; i++) printf("%2d "...,数据域中不需要存放任何内容; 与静态顺序表一致,静态链表的大小是不可改变的; 与单链表一致,静态链表不支持随机存取,只能从头结点开始往后查找; 静态链表中的指针域存储的是下一个元素的数组下标; 我们通过游标...为了避免静态链表中未使用的空间的游标存储的是随机值,我们需要对其初始化为-2; 静态链表的插入与删除操作与单链表的插入删除操作相同,只需要修改指针,不需要移动元素; 静态链表适用于一些不支持指针的高级语言(:...Basic); 静态链表还适用于数据元素数量固定不变的场景(:操作系统中的文件分配表FAT); 结语 今天的内容到这里就全部结束了,有了顺序表、单链表与双链表这些知识点的基础,对于循环链表与静态链表的理解上就会相对容易一点

    39910

    LoG-V Mamba ,高效图像分割的新视角 !

    然而,现有的VM模型由于其序列性质,仍然难以在高维数组中维持令牌的空间局部和全局依赖性,并且采用了多个复杂的光栅化策略,这计算成本高昂,阻碍了SSMs在MIS问题中常见的高维2D和3D图像的应用。...为了在2D数据上实现SSM,需要使用几种扫描策略将2D标记数组转换为1D序列。它们的计算资源与扫描方向数成正比。然后,第一个分支的输出乘以第二个分支的输出,该分支在投影后具有激活函数。...由于Mamba是一个序列建模模块,为了将2D的 Token 数组转换为1D的序列,已经引入了几种扫描策略[24,56,59,35]。...与VSS相比,L-VMamba使用展开运算符,可以有效地保证在2D或3D数组中的相邻token的空间接近性。作者将窗口大小R设置为3,这是卷积层常见的 Kernel 大小。...作者的提出框架解决了高维数据(2D和3D医学图像)的SSM基方法在处理过程中的一些基础顺序限制。

    20610

    【初阶数据结构】打破递归束缚:掌握非递归版快速排序与归并排序

    时间与空间复杂度顺序表单链表 带头双向循环链表栈 队列循环队列 树与二叉树排序 引言本章将单独分享关于非递归实现快排和归并排序,可以帮助我们更好地理解递归和熟悉使用数据结构。...左子树 右子树,对于递归的过程中我们知道左子树会演变为新的根,也会分为新根 新左子树 新右子树,然后我们将采用栈来模拟递归的过程,由于栈的特点是后进先出合前序遍历的特性。...二、非递归实现归并排序由于快速排序采用是前序遍历满足栈相关数据结构的特性,然后归并排序属于后序排序因此不是通过使用栈区模拟非递归实现归并排序。...,%2d][%2d, %2d] ", begin1, end1, begin2, end2); if (end1 >= n || begin2 >= n) {...,%2d][%2d, %2d] ", begin1, end1, begin2, end2); //上面是传值 int j = begin1;

    9010

    前端JS手写代码面试专题(一)

    接下来,通过 reverse() 方法,我们将这个数组中单词的顺序颠倒。在JavaScript中,reverse() 方法是直接对数组进行操作,使数组中的元素反向排列,而这一操作正是我们想要的效果。...通过这一系列操作,我们巧妙地实现了一个功能:不改变单词内部字母的顺序,只是将单词的出现顺序进行了反转。...这里的扩展运算符作用是将一个可迭代对象(Set)展开到一个新的数组中。 这种方法的优雅之处在于,它不仅代码简洁,执行效率也高。...4、如何以最简洁的方式获取格式为“YYYY-MM-DD”的当前日期呢? JavaScript为开发者提供了多种日期和时间处理的方法,但如何以最简洁的方式获取格式为“YYYY-MM-DD”的当前日期呢?...acc[acc.length - 1] + num : num], []); 这个函数通过reduce方法来遍历数组,reduce方法接受一个累加器(acc),它在遍历过程中存储每一步的累计和。

    17110

    【Android RTMP】NV21 图像旋转处理 ( 图像旋转算法 | 后置摄像头顺时针旋转 90 度 | 前置摄像头顺时针旋转 90 度 )

    灰度值 Y 数据读取顺序 : ① 外层循环 : 逐行遍历, 从第一行遍历到最后一行, 从 0 到 mWidth - 1 ; ② 内存循环 : 遍历每一行时, 从底部遍历到顶部, 从 mHeight -...饱和度 色彩值 UV 数据读取顺序 : ① 数据高度个数 : Y 数据的高度与图像高度相等 , UV 数据高度相当于 Y 数据高度的一半 ; ② UV 数据排列 : V 色彩值在前, U 饱和度在后,...UV 数据交替排列 , 一行 mWidth 中, 排布了 mWidth / 2 组 UV 数据 ; ③ UV 数据组有 mWidth / 2 行, mHeight / 2 列, 因此遍历时, 有如下规则...灰度值 Y 数据读取顺序 : ① 外层循环 : 逐行遍历, 从最后一行遍历到第一行, 从 mWidth - 1 到 0 ; ② 内存循环 : 遍历第 i 行时, 从顶部遍历到底部, 从 0 到 mHeight...UV 数据交替排列 , 一行 mWidth 中, 排布了 mWidth / 2 组 UV 数据 ; ③ UV 数据组有 mWidth / 2 行, mHeight / 2 列, 因此遍历时, 有如下规则

    2.3K10

    看图学NumPy:掌握n维数组基础知识点,看这一篇就够了

    查找元素的一种方法是np.where(a==x)[0][0],它既不优雅也不快速,因为要查找的项需要从开头遍历数组的所有元素。...矩阵运算 NumPy中曾经有一个专用的类matrix,但现在已弃用,因此下面将交替使用矩阵和2D数组两个词。 矩阵初始化语法与向量相似: ? 这里需要双括号,因为第二个位置参数是为dtype保留的。...因此在二维数组中,如果axis=0是按列,那么axis=1就是按行。 ? 矩阵运算 除了普通的运算符(+,-,*,/,//和**)以元素方式计算外,还有一个@运算符可计算矩阵乘积: ?...其中硬编码的索引顺序是(y,x,z),RGB图像顺序是: ?...如果不方便使用axis,可以将数组转换硬编码为hstack的形式: ? 这种转换没有实际的复制发生。它只是混合索引的顺序。 混合索引顺序的另一个操作是数组转置。检查它可能会让我们对三维数组更加熟悉。

    6K20

    mapreduce中shuffle中两种排序算法

    start], 每一次遍历找到tmp在数组中的位置m使得,数组左边的数据小于等于tmp,右边的数据大于tmp, 然后将数组分为[start,m-1],[m+1,end]两部分,然后分别遍历,如此递归下去最终使...遍历方法:选取的tmp=array[start]作为一个新的空缺位,先从右至左遍历,找到一个小于等于tmp的数据,然后将该数据赋填充到start位置, 那么此时新的end位置空缺,然后从左志右遍历,找到一个大于...tmp的数据,然后将该数据填充到新的end位置,依次反复交替直到start=end, 此时的start位置便是数据tmp的位置。...先考虑将两个有序数组排序思路:分别遍历两组有序数据,a1,a2 ,起始位置都是0, 比较a1[0]与a2[0]的大小关系,将较大的数据存放在空数组c[0]中,若a1[0]>a2[0],则c[0]=a2[...0], 然后比较a2[1]与a1[0]的大小关系,依次交替比较,只到其中一个数组取完,将未取完的数组的剩下部分依次存放在c后面。

    69340
    领券