当前位置: 首页 > 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.hkea.cn/news/14593582/

相关文章:

  • 做化学合成的网站有哪些西安手机定制网站建设
  • 如何将网站的关键词排名优化中兴能源建设有限公司网站
  • 郑州快速建站价格公司网站内容相近
  • 广州黄埔做网站的公司哪家好2018年网站设计公司
  • 宝安中心客运站网站 筛选功能
  • 交互做的好的网站三门峡网站建设价格
  • 娄底网站建设wyo8研发一个app费用
  • 网站设计计费郑州建设工程信息网站
  • 莱芜网站seowordpress know how
  • 网站建设合同样本响应式布局的优点是什么
  • 长沙经开区建设局网站漳州专业网站建设公司
  • 番禺 大石网站建设互联网广告代理加盟
  • 网站建设 中企动力 石家庄个体户怎么做购物网站
  • 郑州网站建设 华数网站建设注册什么公司好
  • 毕设做网站和app留言板网页模板
  • 上海网站开发哪家好薇wordpress例
  • 网站里面的视频功能怎么做上海金山区建设局网站
  • e4a做网站软件专业的佛山网站设计
  • 9.9网站怎么做舞台灯光网站建设公司
  • 本地化吃喝玩乐平台网站可以做吗品牌建设需打持久战
  • 百度上怎么做网站国外虚拟主机wordpress
  • 大连建站平台优惠云服务器
  • 网赌网站国外空间给公司做网站费用
  • 成都犀牛网站建设公司大连网站开发公司排名
  • 网站对不同分辨率怎么样建设一个电影网站视频
  • 尚易企业邮箱登录入口网站seo排名优化软件
  • 和田网站建设外贸手机网站
  • 建设部网站在哪里报名考试网站建设福永附近网络公司
  • 电子商务网站功能设计与分析网站建设 模版
  • 涪城移动网站建设创业平台是什么意思