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

LeetCode 283 - 移动零

思路

使用双指针法,一次遍历完成原地修改。

  1. 慢指针 slow:指向下一个非零元素应该被放置的位置。
  2. 快指针 fast:遍历整个数组,寻找非零元素。

fast 遇到非零数时,将其值赋给 slow 指向的位置,然后 slow 前进。fast 始终前进。

遍历结束后,slow 指针左侧(不含 slow)都是排好序的非零元素。最后,将 slow 指针及之后的所有位置填充为 0 即可。

C++ 代码实现
class Solution {
public:void moveZeroes(vector<int>& nums) {int slow = 0;// 将所有非零元素移动到数组前面for (int fast = 0; fast < nums.size(); ++fast) {if (nums[fast] != 0) {nums[slow++] = nums[fast];}}// 将 slow 及其之后的位置填充为 0while (slow < nums.size()) {nums[slow++] = 0;}}
};
复杂度
  • 时间复杂度: O(n)fast 指针遍历数组一次。
  • 空间复杂度: O(1),原地操作,未使用额外空间。

http://www.xdnf.cn/news/16654.html

相关文章:

  • Python 程序设计讲义(27):字符串的用法——字符串的常用操作
  • 三步给小智ESP32S3智能语音硬件接入小程序打通MCP服务
  • 【Linux】pthread学习笔记
  • 专业Python爬虫实战教程:逆向加密接口与验证码突破完整案例
  • ubuntu18.04制作raid0
  • 51c大模型~合集161
  • 代码随想录算法训练营第三十五天
  • 车载刷写架构 --- 整车刷写中为何增加了ECU 队列刷写策略?
  • idea运行tomcat日志乱码问题
  • PostgreSQL锁机制详解:从并发控制到死锁检测
  • STM32——HAL库
  • LangChain和LangGraph 里面的 `create_react_agent`有什么不同
  • 基于SpringBoot和Leaflet集成在线天气服务的区县当前天气WebGIS实战
  • VUE -- 基础知识讲解(一)
  • RabbitMQ工作模式
  • 【C#|C++】C#调用C++导出的dll之非托管的方式
  • C# _泛型
  • python线性回归:从原理到实战应用
  • 在 Vue 中,如何在回调函数中正确使用 this?
  • 单片机学习笔记.PWM
  • linux——ps命令
  • 【tips】小程序css ➕号样式
  • 站点到站点-主模式
  • cartographer 点云数据的预处理
  • 第二十四章:深入CLIP的“心脏”:Vision Transformer (ViT)架构全解析
  • vim的`:q!` 与 `ZQ` 笔记250729
  • 【C++算法】81.BFS解决FloodFill算法_岛屿的最大面积
  • 粒子群优化算法(Particle Swarm Optimization, PSO) 求解二维 Rastrigin 函数最小值问题
  • 本土化DevOps实践:Gitee为核心的协作工具链与高效落地指南
  • Python的垃圾回收机制