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

刷题笔记:力扣第48题-旋转图像

1.拿到这道题目第一反应是再创建一个新的矩阵按照顺时针旋转90°的方式遍历原来的矩阵将旋转后的矩阵存入新矩阵中输出即可。这种方法的时间复杂度和空间复杂度均为O(n2)。2.但本题不允许使用新的矩阵这意味着一切修改就只能在原矩阵上进行而且不能是简单地使用交换因为并不是简单的遍历矩阵进行两两位置交换就可旋转整个矩阵。那么只能是覆写为了保证每次覆写之后不丢失原来的值可以让下次旋转的对象就是本次被覆写的值。3.发现按照如上思想进行覆写每次覆写都会经历固定四次循环就会结束即四个元素为一组形成了一个覆写环如下图所示4.假定从矩阵左上角开始遍历即(0, 0)发现想要遍历所有覆写环只需要如下代码即可1. for (row 0; row matrixSize / 2; row){ 2. for (col row; col (*matrixColSize) - 1 - row; col){ 3. // 覆写实现相关代码 4. } 5. }只需要遍历前一半的行数每一行需要遍历到每行“末尾角标减去行数”个元素。具体逻辑为从外向内将矩阵分割为一圈又一圈的正方形每一行的最后一个元素都不需要遍历因为四个角就是一个覆写环最后一个元素也在本层正方形上已经被覆写替换了。而每向下一行上一行的边界即外层正方形都已经被覆写了内层正方形就不需要管外层的元素了所以额外减去行数。5.最后要解决的是如何进行覆写想到可以用数学中有关三角函数的公式来计算设覆写元素坐标为(x1, y1)被覆写元素坐标为(x2, y2)顺时针旋转90°在坐标轴上即角度减去90°可得关系式x2 y1, y2 -x1。6.继续进行推导假定为n * n的矩阵矩阵旋转中心可以看做是(n/2, n/2)而x1到y轴的距离等于y2到x轴的距离具体如下图所示则x1 – n/2 n/2 – y2可以推导出y2 n – 1 – x1。7.基于以上思想初步写出的代码如下1. void rotate(int** matrix, int matrixSize, int* matrixColSize) { 2. int row, col, tmp; 3. for (row 0; row matrixSize / 2; row){ 4. for (col row; col (*matrixColSize) - 1 - row; col){ 5. int i row, j col, tmp matrix[i][j]; 6. for (int num 0; num 4; num){ 7. if (num ! 3){ 8. matrix[i][j] matrix[j][matrixSize - 1 - i]; 9. } else { 10. matrix[i][j] tmp; 11. break; 12. } 13. int k i; 14. i j; 15. j matrixSize - 1 - k; 16. } 17. } 18. } 19. }但是本地测试报错了报错如下8.发现最后输出变成了逆时针旋转90°的结果思考之后得知虽然是顺时针覆写但我代码的逻辑应该是每次寻找下一个未覆写的元素去覆写上一次执行覆写的元素所以每次坐标变换应该是寻找下一个逆时针旋转的元素于是关系式就变为了x2 n – 1 – y1, y2 x1。修正后的代码如下1. void rotate(int** matrix, int matrixSize, int* matrixColSize) { 2. int row, col, tmp; 3. // 外层循环按「层」遍历矩阵从外到内 4. // matrixSize/2只处理前半层内层无需旋转如3×3只处理第0层4×4处理0/1层 5. for (row 0; row matrixSize / 2; row){ 6. // 中层循环遍历当前层的「上边」元素 7. // col从row开始避免重复处理左上角元素 8. // col (*matrixColSize)-1-row只遍历当前层上边的有效元素不包含最后一个避免重复 9. for (col row; col (*matrixColSize) - 1 - row; col){ 10. // 1. 保存当前元素旋转的起点值最后一步填回 11. int i row, j col, tmp matrix[i][j]; 12. // 2. 内层循环四个位置顺时针循环交换核心 13. // 循环4次前3次赋值第4次填回初始值 14. for (int num 0; num 4; num){ 15. if (num ! 3){ 16. // 关键当前位置 顺时针旋转前的上一个位置的值即逆时针旋转90°的位置 17. // 坐标变换公式(i,j) 接收 (matrixSize-1-j, i) 的值 18. matrix[i][j] matrix[matrixSize - 1 - j][i]; 19. } else { 20. // 第4次循环把初始保存的tmp填回最后一个位置完成闭环 21. matrix[i][j] tmp; 22. break; // 交换完成退出内层循环 23. } 24. // 3. 坐标更新跳转到下一个要赋值的位置实际为逆时针旋转90°的坐标变换 25. int k j; // 保存旧的j值避免被覆盖 26. j i; // 新j 旧i 27. i matrixSize - 1 - k; // 新i 矩阵边长-1 - 旧j 28. } 29. } 30. } 31. }本次通过了时间复杂度为O(n2)空间复杂度为O(1)已经是最优解。

相关文章:

刷题笔记:力扣第48题-旋转图像

1.拿到这道题目,第一反应是再创建一个新的矩阵,按照顺时针旋转90的方式遍历原来的矩阵,将旋转后的矩阵存入新矩阵中,输出即可。这种方法的时间复杂度和空间复杂度均为O(n2)。2.但本题不允许使用新的矩阵,这意味着一切修…...

OpenClaw使用教程 + 获取API + 踩坑

新手建议:如果研究不下去,直接用第三方的Oneclaw,字节、阿里、腾讯出品的第三方。 可以等一等,国产有替代。 别焦虑,没用,23年gpt,24年sora,25deepseek和agent,26开年o…...

免费查AI率完全攻略:5种不花钱的检测方法

免费查AI率完全攻略:5种不花钱的检测方法 写完论文之后最怕什么?不是导师让你改格式,而是交上去才发现AI率高得离谱。现在各高校对AI率查得越来越严,知网、维普、万方都上了AIGC检测模块,一旦被标记"疑似AI生成&q…...

免费降AI率软件排行:从白嫖到付费怎么选

免费降AI率软件排行:从白嫖到付费怎么选 写这篇文章的起因是,上个月有三个不同的朋友问了我同一个问题:“有没有免费降AI率的软件?” 一个是大四写毕业论文的,一个是在读研二准备投期刊的,还有一个是帮老板…...

毕业论文免费查AI率+降AI率一站式攻略

毕业论文免费查AI率降AI率一站式攻略 答辩季快到了,论文的事情一件接一件。查重过了还有AI检测,AI检测过了还有格式审查,感觉毕业比入学还难。 这篇文章解决一个具体问题:怎么用免费工具完成论文AI率的检测和修改。从"查出来…...

免费降ai工具实测:哪个免费额度最良心

免费降ai工具实测:哪个免费额度最良心 网上但凡说"免费"两个字的工具,十个里有八个是标题党。要么注册完发现免费额度只有100字,跟没有一样;要么做一堆任务才能解锁,转发三个群、邀请两个好友,折…...

HJ132 小红走网格

中等 通过率:31.75% 时间限制:1秒 空间限制:1024M 知识点数论 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。 描述 在二维平面坐标系中,小红初…...

2026 学术诚信必备!10 款 AI 论文查重工具盘点:查重 + AI 率双检测,告别毕业 / 投稿焦虑

又到本科毕设、期刊投稿的关键节点,「重复率飘红」「AI 率超标」成了悬在每一位学术人头顶的达摩克利斯之剑。传统查重工具只能检测文字重复,面对 AI 生成内容却束手无策;而专业 AI 检测又价格高昂、操作繁琐。 今天为大家整理了10 款兼顾查…...

在服务器上通过git仓库进行多开发者协同工作

本文旨在解决一个需求:在同一服务器上的若干个开发人员能够在自己的账户下面抓取和更新一个项目文件夹。1.首先是root权限创建git仓库:创建用于共享的裸仓库:git clone --bare 项目文件夹名 项目文件夹名.git创建用户组:sudo grou…...

C语言程序设计第四版(何钦铭、颜晖)第八章指针之拆分实数的整数与小数部分

1. 拆分实数的整数与小数部分:要求自定义一个函数 void splitfloat (float x, int* intpart,float *fracpart);其中x是被拆分的实数,*intpart和*fracpart分别是将实数x拆分出来的整数部分与小数部分。编写主函数,并在其中调用函数splitfloat()。试编写相应程序。#include<st…...

苍穹外卖WebSocket连接问题

在调试过程中发现&#xff0c;当前端应用部署在Nginx下访问localhost时&#xff0c;WebSocket连接无法建立&#xff1b;而直接运行前端项目时则可以正常连接。通过浏览器F12排查问题后&#xff0c;发现是WebSocket的URL路径不同&#xff1a;我们实际需要的地址为ws://localhost…...

c++ 类和对象(全)

本文只是把之前上中下三篇文章集合了起来&#xff0c;后面跟着补充一点示例代码&#xff0c;也只是为了方便大家一下子全部观看。 类和对象&#xff08;上&#xff09; 一.类的定义 1.类定义格式 我们可以先看一个类的例子(栈)&#xff1a; class Stack { private:int* a;in…...

优化Docker镜像下载速度:国内镜像源配置指南

1. 为什么需要配置国内Docker镜像源 第一次用Docker拉取镜像时&#xff0c;看着进度条像蜗牛一样缓慢移动&#xff0c;我盯着屏幕足足等了半小时。后来才发现&#xff0c;默认的Docker Hub服务器在国外&#xff0c;国内直接访问速度感人。这就像你在北京点外卖&#xff0c;却非…...

学生专属福利:如何免费获取JetBrains和Navicat全家桶

1. 学生专属福利&#xff1a;为什么你需要它们&#xff1f; 还在为开发工具的高昂费用发愁吗&#xff1f;作为一个过来人&#xff0c;我太懂学生时代那种“想学技术&#xff0c;却被工具卡住”的窘迫了。一套正版的JetBrains全家桶&#xff08;比如IntelliJ IDEA、PyCharm、Web…...

Markdown写作技巧:LaTeX公式+代码块高亮全攻略

Markdown写作技巧&#xff1a;LaTeX公式代码块高亮全攻略 在技术文档和学术研究的写作中&#xff0c;Markdown因其简洁性和强大功能已成为首选工具。但对于需要表达复杂数学公式或展示多语言代码的专业作者来说&#xff0c;如何充分利用Markdown的高级功能仍是一个挑战。本文将…...

基于PEX88096的PCIe 4.0八盘M.2扩展卡设计

1. 项目概述PCIe 4.0 M.2扩展卡长期面临市场定价畸高问题&#xff0c;主流商用产品普遍标价数千元&#xff0c;严重制约了高性能存储系统在DIY、边缘计算及小型服务器场景中的普及应用。本项目以PEX88048 PCIe 4.0交换芯片为核心&#xff0c;构建一款支持8路独立M.2 NVMe插槽的…...

Python+Selenium实现抖音博主批量监控:300+账号实时更新通知(附完整代码)

PythonSelenium构建高可用抖音博主监控系统&#xff1a;从零到一的实战架构与性能调优 最近在技术社群里&#xff0c;经常看到有朋友在讨论如何批量追踪抖音博主的更新动态。无论是做内容分析、竞品研究&#xff0c;还是个人兴趣追踪&#xff0c;手动刷新几百个主页显然不现实。…...

告别数据孤岛:基于WebDAV的Zotero与InfiniCLOUD跨平台同步实战

1. 为什么需要跨平台文献同步&#xff1f; 作为一名常年泡在实验室的研究生&#xff0c;我经历过无数次这样的崩溃瞬间&#xff1a;在实验室电脑上整理好的文献库&#xff0c;回到宿舍打开笔记本发现参考文献全乱了&#xff1b;出差路上想用平板查篇论文&#xff0c;却发现最新…...

【解刊】IEEE Trans系列新宠:中科院1区TOP期刊,国人作者占比近八成领跑全球!

1. IEEE Transactions on Cybernetics&#xff1a;控制论领域的黄金期刊 最近在学术圈里&#xff0c;IEEE Transactions on Cybernetics&#xff08;IEEE控制论汇刊&#xff09;成了热门话题。这本期刊不仅稳居中科院1区TOP&#xff0c;更让人惊讶的是&#xff0c;中国学者在这…...

社区分享 | 从零开始学习 TinyML(三)

1. TinyML模型部署后的性能优化挑战 当你第一次把训练好的TinyML模型部署到Arduino或Cortex-M系列MCU上时&#xff0c;可能会遇到一些令人头疼的问题。我清楚地记得自己早期的一个项目&#xff0c;模型在PC上测试时运行良好&#xff0c;但移植到开发板上后&#xff0c;推理速度…...

基于Mirage Flow的个性化学习推荐系统构建

基于Mirage Flow的个性化学习推荐系统构建 1. 引言 你有没有过这样的经历&#xff1f;同一个班级&#xff0c;同样的老师&#xff0c;同样的教材&#xff0c;但有的同学学得飞快&#xff0c;有的同学却总是卡在某个知识点上&#xff0c;怎么都绕不过去。传统的在线教育平台&a…...

FPGA选型指南:如何为LED大屏控制器挑选性价比最高的芯片(附Xilinx/Lattice对比)

FPGA选型指南&#xff1a;如何为LED大屏控制器挑选性价比最高的芯片&#xff08;附Xilinx/Lattice对比&#xff09; 当一块巨大的户外广告屏在夜幕下亮起&#xff0c;播放着流畅震撼的视频时&#xff0c;很少有人会想到&#xff0c;驱动这背后数百万乃至上千万像素点精准发光的…...

Win11组播通信故障排查:为什么关闭防火墙后还是收不到组播数据?

Win11组播通信深度排障&#xff1a;当防火墙不再是“罪魁祸首” 最近在调试一个分布式数据采集系统时&#xff0c;遇到了一个颇为典型的网络问题&#xff1a;几台运行Windows 11的工控机之间&#xff0c;组播&#xff08;Multicast&#xff09;通信死活不通。按照最常规的思路&…...

避开Doze模式坑!Android 6.0+保活终极方案:JobScheduler与推送SDK混合使用指南

深入解析Android 6.0应用保活&#xff1a;融合JobScheduler与厂商推送的实战策略 在Android生态中&#xff0c;应用保活一直是个让开发者又爱又恨的话题。爱的是&#xff0c;它能确保即时通讯、后台同步、位置追踪等核心功能稳定运行&#xff1b;恨的是&#xff0c;从Android …...

Fish Speech 1.5镜像交付物清单:含启动脚本、日志、配置、证书模板

Fish Speech 1.5镜像交付物清单&#xff1a;含启动脚本、日志、配置、证书模板 1. 镜像概述与技术规格 Fish Speech 1.5是由Fish Audio开源的新一代文本转语音模型&#xff0c;基于LLaMA架构与VQGAN声码器&#xff0c;支持零样本语音合成。用户只需提供10-30秒的参考音频&…...

Z-Image Turbo性能评测:不同硬件下的生成速度对比

Z-Image Turbo性能评测&#xff1a;不同硬件下的生成速度对比 1. 评测背景与目的 Z-Image Turbo作为一款基于Turbo架构的高性能AI绘图工具&#xff0c;以其极速生成能力在本地AI绘画领域备受关注。本次评测旨在通过实际测试&#xff0c;展示不同硬件配置下的生成速度表现&…...

PP-DocLayoutV3内网穿透部署方案

PP-DocLayoutV3内网穿透部署方案 1. 引言 在企业内部网络环境中&#xff0c;如何安全高效地部署和访问AI服务是一个常见的技术挑战。PP-DocLayoutV3作为新一代文档布局分析引擎&#xff0c;能够精准识别表格、公式、文本等文档元素&#xff0c;但传统的部署方式往往受限于内网…...

嘉立创EDA专业版多账号管理技巧:如何避免激活文件冲突

嘉立创EDA专业版多账号管理实战&#xff1a;告别激活文件冲突&#xff0c;实现高效协同 在电子设计领域&#xff0c;尤其是团队协作或自由职业者同时处理多个客户项目时&#xff0c;一个常见且棘手的问题是如何在同一台工作电脑上优雅地管理多个嘉立创EDA专业版账号。你可能遇到…...

游戏原画师福音:Kook Zimage真实幻想Turbo保姆级入门教程

游戏原画师福音&#xff1a;Kook Zimage真实幻想Turbo保姆级入门教程 1. 引言&#xff1a;从零开始&#xff0c;十分钟拥有你的专属幻想引擎 如果你是一位游戏原画师&#xff0c;或者对创作奇幻、仙侠风格的角色充满热情&#xff0c;那么今天这篇文章就是为你准备的。我们不再…...

Chandra OCR快速部署:基于vLLM的开箱即用方案,5分钟搞定环境

Chandra OCR快速部署&#xff1a;基于vLLM的开箱即用方案&#xff0c;5分钟搞定环境 1. 为什么选择Chandra OCR&#xff1f; 如果你正在寻找一个能真正“理解”文档的OCR工具&#xff0c;而不是简单地把图片上的字抠出来&#xff0c;那么Chandra很可能就是你需要的答案。 想…...