首页 > 编程语言 >【C++习题】2.双指针_移动零

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

时间:2024-09-26 21:48:46浏览次数:18  
标签:cur nums ++ 元素 C++ dest 数组 习题 指针

文章目录


题目链接:

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]!=0
                swap(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();跳出循环

标签:cur,nums,++,元素,C++,dest,数组,习题,指针
From: https://blog.csdn.net/hlyd520/article/details/142516389

相关文章

  • 【Py/Java/C++三种语言OD独家2024E卷真题】20天拿下华为OD笔试之【哈希表】2024E-选修
    可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入输出示例一输入输出说明示例二输入输出说明解题思路代码pythonjavacpp时空复......
  • 【Py/Java/C++三种语言OD独家2024E卷真题】20天拿下华为OD笔试之【DFS/BFS】2024E-开
    可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入输出示例一输入输出说明示例二输入输出解题思路代码解法一:BFSpythonjavacpp......
  • C++ day07
    C++笔试题合集:1、什么是虚函数?什么是纯虚函数?    1>在类中定义函数时,在函数名前加上virtual关键字,该函数就是虚函数,虚函数可以保证在父子类中只有一个该函数。    2>当虚函数头=0;时该函数就是纯虚函数,当类中的某些成员函数没有实现的意义,仅仅时该类中拥有......
  • 【C++】你对vector的了解又有多少呢?
    【C++】你对vector的了解又有多少呢?一.vector的介绍二.vector的使用1.vector的构造代码举例:2.vector空间增长问题resize机制:reserve扩容机制:3.vector增删查改代码举例一:代码举例二:一.vector的介绍vector是表示可变大小数组的序列容器。就像数组一样,vect......
  • C++学习,信号处理
    C++信号处理,依赖于操作系统提供的API。信号处理主要用于响应外部事件,如中断信号(如SIGINT,SIGTERM等),这些信号可以由操作系统、其他程序或用户生成。在Unix-like系统(如Linux和macOS)中,信号处理可以通过signal函数或更灵活的sigaction函数来设置。在C++程序中直接使用这些函数是......