首页
学习
活动
专区
工具
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 的长度来区分奇偶行。

    26850

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

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

    17920

    二叉树的锯齿形层序遍历

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

    12510

    2024-11-20:交替子数组计数。用go语言,给定一个二进制数组 nums, 如果一个子数组中的相邻元素的值都不相同,我们称

    2024-11-20:交替子数组计数。用go语言,给定一个二进制数组 nums, 如果一个子数组中的相邻元素的值都不相同,我们称这个子数组为交替子数组。 请返回数组 nums 中交替子数组的总数。...2.交替子数组的定义:交替子数组是指一个子数组中,相邻的元素值必须不同。例如: 2.1.数组 [0] 和 [1] 都是交替子数组,因为它们的元素没有相邻重复的情况。...4.遍历数组: 4.1.对于给定的数组 nums 中的每一个元素 a,执行以下操作: 4.1.1.非重复情况:如果当前元素 a 与前一个元素 pre 不相等,表示交替状态继续,故将当前计数 cur 加...这将确保包含所有以当前元素为结束元素的交替子数组。 5.结束遍历:当遍历完整个数组后,res 将包含所有可能的交替子数组的总数。...由于只需对数组遍历一次进行计算,所需的操作量与数组长度成正比。 • 空间复杂度:O(1),因为使用的变量(res、cur、pre)都是常数空间,不依赖于输入数组的大小,未使用额外的数据结构进行存储。

    9820

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

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

    55320

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

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

    27120

    算法基础-顺序统计量

    顺序统计量 将长度为 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数组里的第 i 顺序统计量,也就是第 i 小的数字,通常的办法是把整个数组排序,然后直接取出对应位置的数字。

    71060

    【优选算法篇】算法江湖中的碎玉拾光——C++模拟题全解,踏步逐章细细品味

    点赞、收藏与分享:如觉得这篇文章对您有帮助,请点赞、收藏并分享! 分享给更多人:欢迎分享给更多对 C++ 感兴趣的朋友,一起学习字符串操作和模拟题解!...中间行字符按两个等差数列交替出现。...中间行的交替字符: 每一中间行的字符位置交替出现在两个等差数列上,位置 i = k 和 j = d - k。 最后累加顺序: 输出时需要按从上到下的顺序,逐行拼接。...遍历过程中,判断每个字符是否按照 “croak” 顺序出现。比如: 遇到 “c” 时,增加 hash['c'] 的计数。...我们只需一次遍历。 空间复杂度:O(1),因为 hash 数组大小固定为 5,unordered_map 只存储 5 个字符的映射关系。

    10310

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

    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基方法在处理过程中的一些基础顺序限制。

    44510

    【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 中作为 摆动序列 的 最长子序列的长度 。

    16320

    2025-02-13:交替组Ⅰ。用go语言,给定一个整数数组 colors,它表示一个由红色和蓝色瓷砖组成的环。在这个数组中,c

    2025-02-13:交替组Ⅰ。用go语言,给定一个整数数组 colors,它表示一个由红色和蓝色瓷砖组成的环。在这个数组中,colors[i] 的值为: ①.0 表示第 i 块瓷砖是红色。...如果连续的三块瓷砖的颜色呈现交替状态(即中间的瓷砖颜色与两侧的瓷砖颜色不同),则称这些瓷砖构成一个“交替组”。 请你计算并返回这个环中交替组的数量。...1.初始化变量 n 为数组 colors 的长度,并初始化变量 res 为交替组的数量,初始值为 0。...2.使用一个循环遍历整个数组 colors: 2.a.对于每个元素 colors[i],判断它与其前一个元素(考虑环形数组情况,需要使用 (i-1+n)%n)和后一个元素 (i+1)%n 的颜色是否不同...2.b.如果当前元素与相邻的两个元素颜色都不同,则将交替组的数量 res 自增 1。 3.遍历完成后,返回交替组的数量 res。 总体时间复杂度为 O(n),其中 n 为数组 colors 的长度。

    5510

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

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

    46110

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

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

    9610

    【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
    领券