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

【LeetCode_283】移动零

刷爆LeetCode系列

  • LeetCode第283题:
  • github地址
  • 前言
  • 题目描述
  • 题目与思路分析
  • 代码实现
  • 算法代码优化

LeetCode第283题:

github地址

有梦想的电信狗

前言

本文用C++实现 LeetCode 第283题


题目描述

题目链接:https://leetcode.cn/problems/move-zeroes/description/

在这里插入图片描述

在这里插入图片描述


题目与思路分析

目标分析

  1. 将数组中所有的0移动到数组的末尾,同时保持非零元素的相对位置
  2. 不复制数组,即原地移除,意味着时间复杂度为O(n),空间复杂度为O(1)
  3. 直接对原数组进行操作

思路:双指针

  • cur:用于扫描元素,从待扫描元素的第一个开始,因此初始下标为0
  • dest:指向数组中,已处理的区间中,最后一个非零元素的下标,初始时还未处理,**初始下标为-**1

操作

  • cur < nums.size()时,进入循环判断

  • nums[cur] == 0 时:当前位置为0,cur++,略过该位置的元素0,dest不变

  • nums[cur] != 0 时: 由于dest已处理的区间中,最后一个非零元素的下标,因此dest++后指向下一个位置,再将非零元素nums[cur]nums[dest] 交换,再cur++

    • 即遇到非零元素:
      • ++dest
      • std::swap(nums[cur], nums[dest]);
      • ++cur

在这里插入图片描述

代码实现

  • 时间复杂度O(n)
  • 空间复杂度O(1)
class Solution {
public:void moveZeroes(vector<int>& nums) {int cur = 0, dest = -1;while(cur < nums.size()){if(nums[cur] == 0){++cur;}else{++dest;std::swap(nums[cur], nums[dest]);++cur;}}}
};

算法代码优化

  • 利用前置和后置++的特性最终优化,但不推荐这么写,因为算法的可读性下降了
class Solution {
public:void moveZeroes(vector<int>& nums) {int cur = 0, dest = -1;while(cur < nums.size()){if(nums[cur] == 0)++cur;elsestd::swap(nums[cur++], nums[++dest]);}}
};

以上就是本文的所有内容了,如果觉得文章对你有帮助,欢迎 点赞⭐收藏 支持!如有疑问或建议,请在评论区留言交流,我们一起进步

分享到此结束啦
一键三连,好运连连!

你的每一次互动,都是对作者最大的鼓励!


征程尚未结束,让我们在广阔的世界里继续前行! 🚀

http://www.dtcms.com/a/365267.html

相关文章:

  • 配置机载电脑开机自启动ros2节点和配置can0
  • 抗体的应用
  • Mysql学习第五天 Innodb底层原理与Mysql日志机制深入剖析
  • 视频数据如何联网共享?
  • 【底层机制】【C++】vector 为什么等到满了才扩容而不是提前扩容?
  • 编程基础-java开发准备
  • 采用基于模型的方法实现车辆SOA威胁分析自动化
  • 华为云云原生架构赋能:大腾智能加速业务创新步伐
  • HTML第八课:HTML4和HTML5的区别
  • 从零开始学大模型之Transformer 架构
  • 鹧鸪云软件:光伏施工管理一目了然,进度尽在掌握
  • 【Python语法基础学习笔记】类的定义和使用
  • 面试复习题-Flutter场景题
  • C# 开发 ACS 运动控制系统:从入门到高阶应用实践
  • LSE录取率上升,中国申请者却减少!除了成绩,这点成关键胜负手
  • 跟做springboot尚品甄选项目
  • 逻辑回归:从原理到实战的完整指南
  • Spring AOP注解案例
  • AI 重塑就业市场:哪些职业会被替代?又有哪些新岗位正在崛起?
  • 基于https+域名的Frp内网穿透教程(Linux+Nginx反向代理)
  • python数据分析 与spark、hive数据分析对比
  • Gemini CLI源码解析:Agent与上下文管理实现细节
  • 2025年COR IOTJ SCI2区,灾后通信无人机基站位置优化和移动充电无人机路径规划,深度解析+性能实测
  • Aerobits-用于 sUAS 和 UTM/U-Space 的微型 ADS-B 技术(收发器/接收器)和无人机跟踪应答器
  • Grok-4 :AI 基准测试霸主,速度与智能并存——但代价几何?
  • 简述 Java 的异常体系结构。Error 和 Exception 有什么区别?
  • 精通人机协同:使用 LangGraph 构建交互式智能体的综合指南
  • 服务器固件全景地图:从BIOS到BMC,升级背后的安全与性能革命
  • [光学原理与应用-376]:ZEMAX - 优化 - 概述
  • 中通笔试ShowMeBug编程题复盘