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

【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.xdnf.cn/news/19773.html

相关文章:

  • 技术小白如何快速的了解opentenbase?--把握四大特色
  • XE 旧版本 JSON 处理
  • 使用 Uni-app 打包 外链地址APK 及 iOS 注意事项
  • K8S-基础架构
  • 离开职场2个月,后知后觉的反思。
  • 素材合集!直播间带货音乐BGM合集,抖音直播间常用热门音乐合集,根据中文分类,方便查找
  • 力扣hot100:矩阵置零(73)(原地算法)
  • 【Python语法基础学习笔记】类的定义和使用
  • WSL + VSCode + Git + Node.js 开发环境配置文档
  • python数据分析 与spark、hive数据分析对比
  • 使用pyspark对上百亿行的hive表生成稀疏向量
  • 2025年COR IOTJ SCI2区,灾后通信无人机基站位置优化和移动充电无人机路径规划,深度解析+性能实测
  • Android aoap开发常见问题之package_allowed_list.txt导致的编译报错
  • 深度学习------模型的保存和使用
  • 深度学习篇---Adam优化器
  • Docker Pull 代理配置方法
  • 【正则表达式】 正则表达式有哪些语法?
  • Low-Light Image Enhancement via Structure Modeling and Guidance 论文阅读
  • AP5414:高效灵活的LED驱动解决方案,点亮创意生活
  • go大厂真实的面试经历与总结
  • 心路历程-初识Linux用户
  • EasyExcel 基础用法
  • 如何在FastAPI中巧妙隔离依赖项,让单元测试不再头疼?
  • 一文吃透 `protoc` 安装与落地
  • 【Spring Cloud微服务】10.王子、巨龙与Spring Cloud:用注解重塑微服务王国
  • 普通人也能走的自由之路
  • 科技赋能田园:数字化解决方案开启智慧农业新篇章
  • 告别 Hadoop,拥抱 StarRocks!政采云数据平台升级之路
  • 【Maniskill】StackCube-v1 官方命令训练结果不稳定的研究报告
  • Android Looper源码阅读