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

A.每日一题:2946. 循环移位后的矩阵相似检查

题目链接:2946. 循环移位后的矩阵相似检查(简单)

算法原理:

解法:模拟

1ms击败100.00%

时间复杂度O(mn)

针对每一行a

首先我们要找到左移和右移k次后的位置在哪:

n为该行一维数组的长度

右移k次:i的最终位置在(i+k)%n

左移k次:i的最终位置在(i-k)%n,由于是减法,因此需要额外+n避免负数,且k要%=n,否则会出现(0-3+2)%2=-1的情况

那么接下来就很好解决了,对每一行进行判断:

如果该行是奇数行就右移检查最终是否相同

如果该行是偶数行就左移检查最终是否相同

只要其中有一个不相同,直接返回false

优化

1ms击败100.00%

时间复杂度O(mn)

在上述式子中,如果要保证移位后的数组与原数组相同

右移要保证:a[(i+k)%n]=a[i]①

左移要保证:a[(i-k)%n]=a[i]②

其实这两个式子是等价的,因为我们把 i=(i-k)%n代入①式,会发现:

a[i%n]=a[(i-k)%n],也就是说a[i]=a[(i-k)%n],这正好就是①式,因此我们针对奇偶数完全可以只用这一个式子来判断

Java代码:

class Solution { public boolean areSimilar(int[][] mat, int k) { int m=mat.length; for(int i=0;i<m;i++) if(!turn(mat[i],k,i%2==1)) return false; return true; } private boolean turn(int[] a,int k,boolean odd){ int n=a.length; k%=n; int[] ret=new int[n]; if(odd) for(int i=0;i<n;i++) ret[(i+k)%n]=a[i]; else for(int i=0;i<n;i++) ret[(i-k+n)%n]=a[i]; for(int i=0;i<n;i++) if(ret[i]!=a[i]) return false; return true; } }
class Solution { //优化 public boolean areSimilar(int[][] mat, int k) { int m=mat.length; for(int i=0;i<m;i++) if(!turn(mat[i],k)) return false; return true; } private boolean turn(int[] a,int k){ int n=a.length; int[] ret=new int[n]; for(int i=0;i<n;i++) ret[(i+k)%n]=a[i]; for(int i=0;i<n;i++) if(ret[i]!=a[i]) return false; return true; } }
http://www.jsqmd.com/news/659934/

相关文章:

  • 19-9 理想认知模型(AGI基础理论)
  • 全网最靠谱的回收加油卡平台,线上操作更简单! - 团团收购物卡回收
  • 鸿蒙Flutter混合开发实战:跨平台UI无缝集成
  • 如何彻底解决Unity游戏模组加载器Cpp2IL下载失败:终极故障排除指南
  • 如何彻底解决MelonLoader Cpp2IL下载失败问题:三步高效修复指南
  • GetQzonehistory:3步永久备份你的QQ空间记忆,告别数据丢失焦虑
  • 【智能代码生成错误检测与修复实战指南】:20年资深架构师亲授3大高发错误模式与5步自动修复法
  • 所有省电技术,都是“占空比游戏”
  • 3061基于单片机的自定义模式洗衣机控制系统设计(数码管,强洗,弱洗,漂洗)
  • Gemma-3 Pixel Studio部署教程:Streamlit架构去侧边栏改造关键代码解析
  • Rockchip烧写工具全攻略:从Windows到Linux的完整配置流程(附常见问题解决)
  • Flexbox布局搞不定的复杂排版?试试用CSS Grid的‘网格线命名’和‘区域模板’来降维打击
  • WIN系统如何下载旧版本的Visual Studio
  • 3062基于单片机的航标灯控制系统设计
  • 【Unity动画优化插件】BT - OptiAnimX —— AAA级动画优化框架深度剖析
  • 话费卡回收的正确方式,变现快到账! - 团团收购物卡回收
  • GitHub中文界面插件完整指南:3分钟让你的GitHub变成中文工作台
  • 万象视界灵坛企业实操:保险理赔图像自动识别‘事故类型’‘损伤部位’‘责任判定关键词’
  • TranslucentTB启动故障完整指南:高效解决Microsoft.UI.Xaml依赖缺失问题
  • Python3.10+Miniconda镜像实测:快速创建独立环境的完整教程
  • BabelDOC:PDF文档翻译的终极解决方案与技术深度解析
  • 轻骨料实力厂家怎么挑?2026年04月优质推荐,轻骨料提升建筑美观度 - 品牌推荐师
  • vxe-grid树形表格与懒加载踩坑实录:从接口设计到前端渲染的全链路指南
  • Python爬虫实战:手把手教你智慧场馆工程 - 构建全球会展功能分区结构化词表!
  • Windows AirPods电量显示终极指南:免费解锁苹果耳机完整功能
  • 3049基于单片机的矩阵按键电子钟系统设计(数码管)
  • D28: Day7 复盘 - 未来三年的 Agent 发展趋势
  • Java程序设计(第3版)第二章——逻辑运算符
  • Linux驱动学习笔记
  • Python爬虫实战:手把手教你构建结构化宠物疫苗科普字典库 (Python 实战)!