【C++习题】2.双指针_移动零

server/2024/10/11 13:26:11/

文章目录

    • 题目链接:
    • 题目描述:
    • 解法(快排的思想:数组划分区间 - 数组分两块):
    • C++ 算法代码:
    • 图解


题目链接:

283.移动零


题目描述:

8ae324a8c2586aec8c1d8dd5879035e8


解法(快排的思想:数组划分区间 - 数组分两块):

双指针算法,利用数组下标充当指针。

我们可以用一个 cur 指针来扫描整个数组,另一个 dest 指针用来记录非零数序列的最后一个位置。根据 cur 在扫描的过程中,遇到的不同情况,分类处理,实现数组的划分。

cur 遍历期间,使 [0, dest] 的元素全部都是非零元素, [dest + 1, cur - 1] 的元素全是零。

127e769b240c2db89634662a2a181c02

遇到0元素:

cur++

遇到非0元素:

swap(dest+1, cur)

dest++, cur++


C++ 算法代码:

class Solution 
{
public:void moveZeroes(vector<int>& nums) {for(int cur = 0, dest = -1; cur < nums.size(); cur++)if(nums[cur]) // 处理非零元素nums[cur]!=0swap(nums[++dest], nums[cur]);}
};

如果遇到0元素,cur++。也就是for(int cur = 0, dest = -1; cur < nums.size(); cur++)的末尾那句。

如果遇到非0元素,先swap(dest+1, cur)然后dest++, cur++。这里合并为 swap(nums[++dest], nums[cur]);


图解

  1. 开始:

d982048a769acad16bdca6c46649f308

  1. nums[cur]=0,不进入if条件,cur++

21842c468e1c458409b958b969586c08

  1. nums[cur]=1,进入if条件,交换++destcur位置的元素

9823e1d8ede2d6afa055aa794ace2869

  1. 然后cur++

4dcb2c872a675d23093405db3ec5ff33

  1. nums[cur]=0,不进入if条件,cur++

6d360d2972bbf066fb91bc68fad97457

  1. nums[cur]=3,进入if条件,交换++destcur位置的元素

4ae4908e4dd93655f2a980dcf389a133

  1. 然后cur++

8b807164ad280716ef2b916f1b8d374a

  1. nums[cur]=12,进入if条件,交换++destcur位置的元素

bbaa80e08655051b5389fac802a1f0bb

  1. 然后cur++

    不满足cur < nums.size();跳出循环


http://www.ppmy.cn/server/122452.html

相关文章

【数据结构-差分】【hard】力扣995. K 连续位的最小翻转次数

给定一个二进制数组 nums 和一个整数 k 。 k位翻转 就是从 nums 中选择一个长度为 k 的 子数组 &#xff0c;同时把子数组中的每一个 0 都改成 1 &#xff0c;把子数组中的每一个 1 都改成 0 。 返回数组中不存在 0 所需的最小 k位翻转 次数。如果不可能&#xff0c;则返回 -…

Exception in thread “main“ java.lang.CloneNotSupportedException 解决方案

目录 前言&#xff1a; 解决方案 后言&#xff1a; 结言&#xff1a; 前言&#xff1a; 今天在学习设计模式的时候&#xff0c;犯的一个错误。很低级的错误&#xff0c;不过也记录一下&#xff08;绝对不是想水文章&#xff09;。 解决方案 在使用克隆方法时抛出这个异…

青柠视频云——视频丢包(卡顿、花屏、绿屏)排查

一、问题说明 近期有客户反馈&#xff0c;接入平台的设备经常出来卡顿、花屏、录屏的情况&#xff0c;出现这样的场景很是尴尬。 客户是私有化部署在公网环境&#xff0c;于是我们联系客户&#xff0c;对问题进行追踪排查。 二、场景复现 我们现场情况确认的过程中&#xff0c;…

菱形继承、菱形虚拟继承、菱形继承中多态问题、菱形虚拟继承中多态问题

菱形继承以及菱形继承中的多态问题 一、对象模型&#xff08;一&#xff09;菱形继承 & 菱形虚拟继承&#xff08;一&#xff09;菱形继承中多态 & 菱形虚拟继承中多态 二、总结 本文主要叙述菱形继承、菱形虚拟继承、菱形继承中多态、菱形虚拟继承中多态&#xff0c;这…

NLP基础1

NLP基础1 深度学习中的NLP的特征输入 1.稠密编码&#xff08;特征嵌入&#xff09; 稠密编码&#xff08;Dense Encoding&#xff09;&#xff1a;指将离散或者高纬的稀疏数据转化为低纬度的连续、密集向量表示 特征嵌入&#xff08;Feature Embedding&#xff09; ​ 也称…

【2023工业图像异常检测文献】SimpleNet

SimpleNet:ASimpleNetworkforImageAnomalyDetectionandLocalization 1、Background 图像异常检测和定位主要任务是识别并定位图像中异常区域。 工业异常检测最大的难题在于异常样本少&#xff0c;一般采用无监督方法&#xff0c;在训练过程中只使用正常样本。 解决工业异常检…

git使用方法详解(适合新手)

设置用户信息 用户的名称和邮箱在提交更改时用于标识。 全局配置: 所有git仓库默认的配置&#xff0c;在当前git仓库参数为设置时的默认值。通过--global设置全局配置。非全局配置: 仅在当前仓库有效。 设置用户名 命令格式 git config --global user.name "<user…

国产Linux:OpenEuler溯源

OpenEuler 是一个开源的、面向多样性计算的操作系统&#xff0c;由华为公司发起并捐赠给开放原子开源基金会。它支持多种计算场景&#xff0c;包括服务器、云计算、边缘计算和嵌入式设备。OpenEuler 系统以其开源性、安全性、高性能和良好的生态支持而受到关注&#xff0c;被视…