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

面试常考:如何原地重排数组?这个思路绝了

解题思路

这道题我们用两个指针分别追踪奇数位和偶数位,每次检查最后一个元素是奇数还是偶数,然后把它交换到对应的位置上。

比如最后一个元素是奇数,就把它换到下一个需要填充的奇数位(1, 3, 5…),换过来的元素又成为新的"最后一个元素",继续这个过程。

这样做的优势是不需要额外空间,而且每次交换都在推进进度,最终当奇数位和偶数位都填满后,数组自然就符合要求了。

举个栗子

输入:[4, 2, 5, 7]

执行过程:

  1. 初始:[4, 2, 5, 7],最后元素 7(奇数) → 交换到 odd=1 →[4, 7, 5, 2]
  2. 最后元素 2(偶数) → 交换到 even=0 →[2, 7, 5, 4]
  3. 最后元素 4(偶数) → 交换到 even=2 →[2, 7, 4, 5]
  4. 最后元素 5(奇数) → 交换到 odd=3 →[2, 7, 4, 5]

输出:[2, 7, 4, 5]

代码实现

publicstaticint[]sortArrayByParityII(int[]nums){intn=nums.length;for(intodd=1,even=0;odd<n&&even<n;){if((nums[n-1]&1)==1){// 最后一个元素是奇数,放到奇数位swap(nums,odd,n-1);odd+=2;}else{// 最后一个元素是偶数,放到偶数位swap(nums,even,n-1);even+=2;}}returnnums;}publicstaticvoidswap(int[]nums,inti,intj){inttmp=nums[i];nums[i]=nums[j];nums[j]=tmp;}

如果觉得有帮助,欢迎点赞、关注、转发~

http://www.cnnetsun.cn/news/41036.html

相关文章:

  • MPK(Mirage Persistent Kernel)源码笔记(4)--- 转译系统
  • 中国地形数据完整指南:5分钟快速上手ArcGIS地形分析
  • 为什么我的应用会卡顿?垃圾回收中的STW难题与破解之道
  • 深入解析 JuiceFS 垃圾回收机制
  • Wi-Fi 6之后,未来家庭路由的几大核心看点
  • FFmpeg开发笔记(八十七)采用Kotlin的手机开源播放器VLC-Android
  • PostgreSQL实时数据同步:5分钟掌握pg_replicate终极指南
  • Monkey‘s Audio(无损音频压缩器)
  • ChatPDF终极指南:5分钟学会与PDF文档智能对话
  • 如何快速解决ComfyUI-SeedVR2依赖冲突:完整避坑指南
  • Java并发编程利器:从ConcurrentHashMap到Fork/Join的奇幻之旅
  • 5分钟掌握IOPaint集成:从零部署到深度定制全攻略
  • 汽车变速器电控系统Simulink模型:从原理到实现
  • Atmosphere自定义固件终极指南:从安装到故障排除
  • docker网络模式详解
  • 永磁同步电机基于非线性磁链观测器的转子位置估计策略:SCI一区顶刊复现与SIMULINK仿真
  • 异步电机直接转矩控制算法模型在R2016b版本及以上的正常运行
  • 从前端体验到后端架构:Airbnb全栈SDET面试深度解析
  • rtpengine作为媒体代理的一个问题
  • Caesium图像压缩器高级配置与定制化指南
  • Graphiti时序知识图谱:5大革新策略重塑动态知识管理
  • CMATH:如何5分钟掌握小学数学计算能力评估
  • 使用RNNoise进行音频降噪
  • 风储模型中的功率分配模型
  • 眼见非实(Bugku杂项入门)
  • 毕方Talon:鸿蒙开发的编译时安全守护神
  • 创客匠人峰会新解:高势能 IP 打造 ——AI 时代知识变现的十倍增长密码
  • Java线程池与Executor框架完全指南:一看就会,一看就懂!
  • 随机图床 _
  • PETools 逆向工程工具完整使用指南