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

189.轮转数组

题目描述

题解1(使用额外的数组)(最简单)

思路

直接计算出每个元素最终应该待在哪里,然后把它放到新数组的对应的位置

代码

classSolution{publicvoidrotate(int[]nums,intk){intn=nums.length;int[]newArr=newint[n];for(inti=0;i<n;++i){newArr[(i+k)%n]=nums[i];}System.arraycopy(newArr,0,nums,0,n);}}

System.arraycopy()方法详解

题解2(环状替换)

思路

当我们把元素放到新位置时,原来位置上的元素就会被覆盖。所以,我们需要一个临时变量把原来的元素存起来,然后再把存起来的元素放到它下一个该去的位置。一直重复这个过程,直到所有的元素都被移动过

代码

classSolution{publicvoidrotate(int[]nums,intk){intn=nums.length;// 如果 k 大于数组长度,取余数即可,因为移动 n 次等于没移动k=k%n;if(k==0)return;// count 用来记录已经被成功移动到最终位置的元素个数intcount=0;// start 记录每一轮替换的起始位置for(intstart=0;count<n;start++){intcurrent=start;// 当前正在处理的索引intprev=nums[start];// 当前需要被移动的元素do{// 计算该元素应该去的新位置intnext=(current+k)%n;// 暂存新位置上的原来元素inttemp=nums[next];// 将当前元素放到新位置nums[next]=prev;// 准备处理刚才被替换出来的元素prev=temp;current=next;// 成功移动了一个元素,计数器加1count++;}while(start!=current);// 如果回到了当前这一轮的起点,说明这一个环已经处理完了}}}

题解3(数组翻转)

思路

代码

classSolution{publicvoidrotate(int[]nums,intk){intn=nums.length;// 如果 k 大于数组长度,取余数即可k=k%n;// 1. 翻转整个数组reverse(nums,0,n-1);// 2. 翻转前 k 个元素reverse(nums,0,k-1);// 3. 翻转剩余的 n - k 个元素reverse(nums,k,n-1);}// 辅助函数:翻转数组 nums 中从 start 到 end(包含边界)的元素privatevoidreverse(int[]nums,intstart,intend){while(start<end){inttemp=nums[start];nums[start]=nums[end];nums[end]=temp;start++;end--;}}}
http://www.jsqmd.com/news/539730/

相关文章:

  • 2026年市政钢板租赁行业深度分析报告 - 深度智识库
  • Go的runtime-debug包:设置最大栈深度和内存限制
  • 2026年优质小型冻干机厂家选择秘籍大公开,评价高的小型冻干机产品技术实力与市场典范解析 - 品牌推荐师
  • Nmap
  • Go Channel 缓冲区的底层实现
  • 用Python解放AutoCAD:pyautocad自动化绘图完全指南
  • Linux系统编程----文件IO
  • CSS 命名规范:从混乱到有序的代码艺术
  • AI 模型推理的 GPU 性能调优方法
  • tcp buffer和socket buffer - 小镇
  • Seed 2.0编程能力实测:全球第7水准,Python/Java代码生成实操
  • 迷宫传送[最短路径]
  • 集合对象的绑定
  • 在Vscode中使用Claude code(接智普或KIMI)
  • MCP 服务开发笔记
  • Javascript提高:JavaScript Promise 超通俗解释-由Deepseek产生
  • 别再死记ResNet结构了!用PyTorch手把手复现ResNet34,搞懂残差连接为什么能解决‘退化’问题
  • 2026想申港大本科?专业港大本科申请中介推荐(附联系方式) - 品牌2026
  • C++的std--ranges适配器视图元素修改与原数据可变性在算法中的保证
  • AI 开发实战:异常处理怎么设计,AI 才能帮你真正找出薄弱点
  • CI2451实战指南:一款2.4G无线SoC芯片,如何让遥控玩具和灯控设计更简单?
  • 设置Linux命令行提示符shell prompt的前缀颜色,区分命令和输出结果(重连、重启都不会消失)
  • LuckyLilliaBot实战指南:从零构建NTQQ机器人系统
  • 天梯赛L2题解(029-032)
  • 像素幻梦创意工坊实战:为Unity游戏项目批量生成像素资源包
  • Markdown Viewer浏览器插件:快速预览Markdown文档的终极指南
  • 拖拽生成!这款编辑器做到了!告别代码妥妥的!
  • 下载 | Win11 25H2 官方正式版ISO映像!(3月更新、消费者版/专业版、商业版/企业版、26200.8037)
  • CSS 渐变的高级应用:色彩的流动艺术
  • 保姆级教程:用C语言数组手算1000的阶乘,解决PTA编程题(附完整代码)