news 2026/7/13 3:44:03

【面试算法笔记】0105-数组-螺旋矩阵

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【面试算法笔记】0105-数组-螺旋矩阵

个人主页:https://github.com/zbhgis

前言

本系列主要记录自己学习算法的过程中的感悟。

力扣59. 螺旋矩阵 II

链接:https://leetcode.cn/problems/spiral-matrix-ii/description/

注意点

定义一个方向变量,决定每次移动的步数与长度

每次走到边缘或者下一个元素有值的时候,就转向。

其他情况就一直走就行。

代码

class Solution { private static final int[][] DIR = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; public int[][] generateMatrix(int n) { int[][] ans = new int[n][n]; int i = 0; int j = 0; int d = 0; for (int val = 1; val <= n * n; val ++) { ans[i][j] = val; int nx = i + DIR[d][0]; int ny = j + DIR[d][1]; if (nx < 0 || nx >= n || ny < 0 || ny >= n || ans[nx][ny] != 0) { d = (d + 1) % 4; } i += DIR[d][0]; j += DIR[d][1]; } return ans; } }

时空复杂度分析

时间复杂度为O(n²)

空间复杂度为O(1)

Acwing756. 蛇形矩阵

链接:https://www.acwing.com/problem/content/description/758/

注意点

同上

代码

import java.util.Scanner; public class Main { private static final int[][] DIR = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); int n = sc.nextInt(); int[][] ans = new int[m][n]; int i = 0; int j = 0; int d = 0; for (int val = 1; val <= m * n; val ++) { ans[i][j] = val; int nx = i + DIR[d][0]; int ny = j + DIR[d][1]; if (nx < 0 || nx >= m || ny < 0 || ny >= n || ans[nx][ny] != 0) { d = (d + 1) % 4; } i += DIR[d][0]; j += DIR[d][1]; } for (i = 0; i < m; i ++) { for (j = 0; j < n; j ++) { System.out.print(ans[i][j] + " "); } System.out.println(); } } }

时空复杂度分析

同上

力扣54. 螺旋矩阵

链接:https://leetcode.cn/problems/spiral-matrix/description/

注意点

与前两题不同的是,这次需要通过matrix[i][j] = Integer.MAX_VALUE来判断是不是已经访问过了。其他步骤都一样。

代码

class Solution { private static final int[][] DIR = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; public List<Integer> spiralOrder(int[][] matrix) { int m = matrix.length; int n = matrix[0].length; List<Integer> ans = new ArrayList<>(m * n); int i = 0; int j = 0; int d = 0; for (int k = 1; k <= m * n; k ++) { ans.add(matrix[i][j]); int nx = i + DIR[d][0]; int ny = j + DIR[d][1]; matrix[i][j] = Integer.MAX_VALUE; if (nx < 0 || nx >= m || ny < 0 || ny >= n || matrix[nx][ny] == Integer.MAX_VALUE) { d = (d + 1) % 4; } i += DIR[d][0]; j += DIR[d][1]; } return ans; } }

时空复杂度分析

时间复杂度为O(n²)

空间复杂度为O(1)

力扣LCR 146.螺旋遍历二维数组

链接:https://leetcode.cn/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/description/

注意点

这一题还需要额外注意当输入的为空数组的情况,这个时候直接返回空数组就行,不要处理。

代码

class Solution { private static final int[][] DIR = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; public int[] spiralArray(int[][] array) { int m = array.length; if (m == 0) { return new int[0]; } int n = array[0].length; int[] ans = new int[m * n]; int i = 0; int j = 0; int d = 0; for (int k = 0; k < m * n; k ++) { ans[k] = array[i][j]; array[i][j] = Integer.MAX_VALUE; int x = i + DIR[d][0]; int y = j + DIR[d][1]; if (x < 0 || x >= m || y < 0 || y >= n || array[x][y] == Integer.MAX_VALUE) { d = (d + 1) % 4; } i += DIR[d][0]; j += DIR[d][1]; } return ans; } }

时空复杂度分析

时间复杂度为O(n²)

空间复杂度为O(1)

参考

https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 3:43:10

AI Agent工作流实战:从核心概念到猜数字游戏完整开发指南

最近在AI应用开发领域&#xff0c;很多开发者都遇到了一个共同的困境&#xff1a;虽然AI模型能力越来越强&#xff0c;但真正能稳定运行的AI应用却寥寥无几。特别是在AI小游戏这类需要复杂交互的场景中&#xff0c;单纯调用API往往无法满足需求&#xff0c;关键问题在于缺乏可靠…

作者头像 李华
网站建设 2026/7/13 3:42:20

肥胖风险分层分析:从BMI到临床终点的生存建模实战

1. 项目概述&#xff1a;这不是一次普通的体重数据练习&#xff0c;而是一次用真实公共卫生逻辑解剖“肥胖”问题的实战 “Data Project 3: Obesity Analysis”——光看标题&#xff0c;很多人会下意识把它归类为“学生作业”“课程大作业”或“Kaggle入门练手”。但我在带团队…

作者头像 李华
网站建设 2026/7/13 3:40:48

YOLOv8目标检测全流程实践:从环境搭建到项目部署完整指南

这类项目最值得先看的不是功能列表&#xff0c;而是能不能在普通开发环境里稳定跑通全流程。YOLOV8 作为当前目标检测的常用模型&#xff0c;很多教程只讲训练或只讲部署&#xff0c;但实际落地时&#xff0c;环境、数据、训练、结果分析和项目集成这几个环节只要有一个卡住&am…

作者头像 李华
网站建设 2026/7/13 3:35:53

WebSocket实现低延迟AI模型推理的工程实践

1. 项目概述&#xff1a;为什么实时模型推理非得用 WebSocket 不可&#xff1f;“Unleashing the power of WebSockets for real-time Model Inference”——这个标题里藏着一个被很多工程团队长期低估的现实矛盾&#xff1a;我们花大力气把模型精度刷到99.2%&#xff0c;却让最…

作者头像 李华
网站建设 2026/7/13 3:35:35

Tensile:LinkedIn开源的TensorFlow与Spark互操作数据桥接方案

1. 项目概述&#xff1a;Tensile——LinkedIn开源的TensorFlow与Spark互操作桥梁你可能已经遇到过这样的场景&#xff1a;团队里数据工程师用Spark清洗和处理TB级日志数据&#xff0c;而算法工程师却在TensorFlow里反复调试一个ResNet模型&#xff1b;中间的数据流转靠CSV导出导…

作者头像 李华