当前位置: 首页 > news >正文

闵行网站推广网站导航的重要性

闵行网站推广,网站导航的重要性,怎么建设国际网站首页,太原网页制作服务内容介绍 给你一个 m 行 n 列的矩阵 matrix #xff0c;请按照 顺时针螺旋顺序 #xff0c;返回矩阵中的所有元素。 示例 1#xff1a; 输入#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出#xff1a;[1,2,3,6,9,8,7,4,5]示例 2#xff1a; 输入#xff1a;matrix …内容介绍 给你一个 m 行 n 列的矩阵 matrix 请按照 顺时针螺旋顺序 返回矩阵中的所有元素。 示例 1 输入matrix [[1,2,3],[4,5,6],[7,8,9]] 输出[1,2,3,6,9,8,7,4,5]示例 2 输入matrix [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出[1,2,3,4,8,12,11,10,9,5,6,7]提示 m matrix.lengthn matrix[i].length1 m, n 10-100 matrix[i][j] 100 完整代码 int directions[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize) {if (matrixSize 0 || matrixColSize[0] 0) {*returnSize 0;return NULL;}int rows matrixSize, columns matrixColSize[0];int visited[rows][columns];memset(visited, 0, sizeof(visited));int total rows * columns;int* order malloc(sizeof(int) * total);*returnSize total;int row 0, column 0;int directionIndex 0;for (int i 0; i total; i) {order[i] matrix[row][column];visited[row][column] true;int nextRow row directions[directionIndex][0], nextColumn column directions[directionIndex][1];if (nextRow 0 || nextRow rows || nextColumn 0 || nextColumn columns || visited[nextRow][nextColumn]) {directionIndex (directionIndex 1) % 4;}row directions[directionIndex][0];column directions[directionIndex][1];}return order; }思路详解 一、问题背景 给定一个二维数组要求按照螺旋顺序遍历数组并返回一个一维数组其中包含按螺旋顺序遍历得到的元素。 二、解题思路 边界处理 首先检查数组是否为空如果为空则直接返回空数组。 初始化 创建一个二维数组visited用于标记数组中已经遍历过的元素。初始化数组的大小为行数乘以列数。创建一个一维数组order用于存储按螺旋顺序遍历得到的元素。 遍历策略 定义一个方向数组directions包含四个方向上、右、下、左。初始化起点row和column以及方向索引directionIndex。遍历数组按照螺旋顺序填充order数组。在遍历过程中如果下一个位置越界或者已经遍历过则改变方向。 结果返回 遍历完成后返回order数组。 三、代码详解 边界处理 如果数组为空直接返回空数组。 if (matrixSize 0 || matrixColSize[0] 0) {*returnSize 0;return NULL; }初始化 创建visited数组并初始化为0。创建order数组并分配内存。初始化rows、columns、total和directionIndex。 int rows matrixSize, columns matrixColSize[0]; int visited[rows][columns]; memset(visited, 0, sizeof(visited)); int total rows * columns; int* order malloc(sizeof(int) * total); *returnSize total;遍历策略 初始化起点row和column以及方向索引directionIndex。遍历数组按照螺旋顺序填充order数组。在遍历过程中如果下一个位置越界或者已经遍历过则改变方向。 int row 0, column 0; int directionIndex 0; for (int i 0; i total; i) {order[i] matrix[row][column];visited[row][column] true;int nextRow row directions[directionIndex][0], nextColumn column directions[directionIndex][1];if (nextRow 0 || nextRow rows || nextColumn 0 || nextColumn columns || visited[nextRow][nextColumn]) {directionIndex (directionIndex 1) % 4;}row directions[directionIndex][0];column directions[directionIndex][1]; }结果返回 遍历完成后返回order数组。 return order;四、总结 通过上述步骤我们能够有效地遍历二维数组并按照螺旋顺序返回一维数组。关键在于正确地初始化数组、遍历策略和结果返回。这种方法的时间复杂度为O(n)其中n为数组的大小。空间复杂度为O(n)用于存储一维数组和二维数组。 知识点精炼 一、核心概念 边界条件检查在开始遍历之前检查输入的二维数组是否为空。二维数组访问使用两个索引变量来访问二维数组中的元素。动态数组分配在内存中动态分配一维数组来存储遍历结果。方向数组使用一个二维数组来表示遍历的方向。 二、知识点精炼 初始化 创建一个二维数组visited来标记数组中已经遍历过的元素。创建一个一维数组order来存储按螺旋顺序遍历得到的元素。 遍历策略 初始化起点row和column以及方向索引directionIndex。遍历数组按照螺旋顺序填充order数组。在遍历过程中如果下一个位置越界或者已经遍历过则改变方向。 结果返回 遍历完成后返回order数组。 三、性能分析 时间复杂度O(n)其中n为数组的大小。空间复杂度O(n)用于存储一维数组和二维数组。 四、实际应用 数据处理在处理二维数据时这种算法可以帮助我们按照特定顺序访问数据。算法竞赛在算法竞赛中掌握这种算法对于解决与二维数组遍历相关的问题非常有帮助。 五、代码实现要点 边界条件检查确保输入的二维数组不为空。动态数组分配正确分配内存空间避免内存泄漏。遍历策略正确实现螺旋遍历策略避免数组越界和重复访问。结果返回正确返回遍历结果。 减少空间复杂度的思路 在原始代码中我们使用了一个二维数组visited来标记已经遍历过的元素这导致了较高的空间复杂度。为了减少空间复杂度我们可以使用一个一维数组来替代二维数组这样可以将空间复杂度从O(n)降低到O(1)。 以下是优化后的代码 int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize) {if (matrixSize 0 || matrixColSize[0] 0) {*returnSize 0;return NULL;}int rows matrixSize, columns matrixColSize[0];int* order malloc(sizeof(int) * (rows * columns));*returnSize rows * columns;int top 0, bottom rows - 1, left 0, right columns - 1;int index 0;while (top bottom left right) {// Traverse the top rowfor (int i left; i right; i) {order[index] matrix[top][i];}top;// Traverse the rightmost columnfor (int i top; i bottom; i) {order[index] matrix[i][right];}right--;// If there is still a row leftif (top bottom) {// Traverse the bottom rowfor (int i right; i left; i--) {order[index] matrix[bottom][i];}bottom--;}// If there is still a column leftif (left right) {// Traverse the leftmost columnfor (int i bottom; i top; i--) {order[index] matrix[i][left];}left;}}return order; }在这个优化版本中我们使用了一个一维数组order来存储遍历结果而不是使用一个二维数组visited来标记已经遍历过的元素。我们通过维护四个边界变量top、bottom、left、right来控制遍历的方向并在每次迭代中只遍历尚未访问的部分。这种方法避免了使用额外的空间来存储已访问的元素从而将空间复杂度降低到O(1)。
http://www.dnsts.com.cn/news/20773.html

相关文章:

  • 温州瓯北做网站wordpress调用最新文章插件
  • 贵州省和城乡建设厅官方网站网络信息推广服务
  • wordpress内存溢出seo线下培训课程
  • 规模大的企业建站设备管理系统下载
  • 6成都网站建设爱做奈官方网站
  • 网站建设实训个人总结3000字网站关键词搜索优化怎么做
  • 天津市城乡建设部网站首页discuz做网站赚钱经历
  • 网站推广软件费用是多少驾校官方网站 模板
  • 长沙企业建站系统附近广告牌制作电话
  • 站长工具seo哪些公司可以做网站
  • 网站建设套餐方案网站权重
  • 诸城网站建设公司排名厦门企业网站建设专家
  • 重庆网站建设公司哪个最好做ppt找图片的网站有哪些
  • 网站哪里买外链做资讯网站盈利
  • 网站查询访问域名网站如何做口碑营销
  • 网站中的ppt链接怎么做的wordpress ddos 2014
  • 手机网站优化排名首页群晖 wordpress 失败
  • 网站建设幽默莞城最新通告
  • 成都建立网站做网站难度大吗
  • 广安网站开发做旅游网站怎样
  • 做网站可以做哪些方面的本地唐山网站建设
  • 项目网站基础设施建设移动网站开发书籍
  • 阳春建设局网站网站建设实训存在的问题
  • 建立网站的价格珠海企业免费建站
  • 网站统计开放平台网站设计分工
  • 网站首页可以做竖版吗龙岩网站设计价格
  • wordpress linux 建站成都网页设计制作
  • 网站连接如何做二维码一哥优购物官方网站
  • 电子书推送网站怎么做山东系统建站怎么用
  • 化妆品企业网站案例大全做游戏直播那个网站好