力扣双指针算法题目:移动零

1.题目

. - 力扣(LeetCode)

2.思路解析

这个题目的思路和"使用递归排序快速排序解决数组的排序问题"相同

cpp 复制代码
class solution
{
public:
	void QuickSort(vector<int>& nums, int left, int right)
	{
		if (left > right) return;
		int key = left;
		int pre = left;
		int cur = left + 1;
		while (cur <= right)
		{
			if (nums[cur] < nums[key])
			{
				pre++;
				swap(nums[pre], nums[cur]);
			}
			cur++;
		}
		swap(nums[key], nums[pre]);
		key = pre;
		QuickSort(nums, left, key - 1);
		QuickSort(nums, key + 1, right);
	}
};

使用双指针des和cur

指针des和cur向右遍历

在非零区段中,des和cur一定是紧挨着的且cur一定比des快(cur在des右边)

cur遇到零之后,des就不走,但是cur要接着走,此时cur指向零,des指向cur之前一个非0元素

在下一个循环中,cur不指向0,cur和des同时向前走一格,此时des指向零,cur不指向零

3.代码

cpp 复制代码
class Solution {
public:
    void moveZeroes(vector<int>& nums) 
    {
        int des=-1;
        int cur=0;
        while(cur<nums.size())
        {
            if(nums[cur]!=0)
            {
                des++;
                swap(nums[cur],nums[des]);

                
            }
            cur++;
        }
    }
};
相关推荐
AI科技星9 分钟前
为什么变化的电磁场才产生引力场?—— 统一场论揭示的时空动力学本质
数据结构·人工智能·经验分享·算法·计算机视觉
TheLegendMe1 小时前
贪心+线程安全单例
算法·哈希算法
豐儀麟阁贵1 小时前
8.5在方法中抛出异常
java·开发语言·前端·算法
胖咕噜的稞达鸭2 小时前
算法入门:滑动窗口--->找到字符串中所有的字母异位词,串联所有的子串,最小覆盖子串
数据库·redis·算法
小青龙emmm2 小时前
2025级C语言第二次周测(国教专用)题解
c语言·开发语言·算法
WolfGang0073212 小时前
代码随想录算法训练营Day28 | 509.斐波那契数列、70.爬楼梯、746.使用最小花费爬楼梯
算法
Boop_wu2 小时前
[Java EE] 多线程进阶(JUC)(2)
java·jvm·算法
闻缺陷则喜何志丹3 小时前
【SOSDP模板 容斥原理 逆向思考】3757. 有效子序列的数量|分数未知
c++·算法·力扣·容斥原理·sosdp·逆向思考
CoovallyAIHub3 小时前
如何在手机上轻松识别多种鸟类?我们发现了更简单的秘密……
深度学习·算法·计算机视觉
第二只羽毛4 小时前
遵守robots协议的友好爬虫
大数据·爬虫·python·算法·网络爬虫