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

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++;
        }
    }
};
相关推荐
一去不复返的通信er7 小时前
贪心算法-合并区间(LeetCode 56)
算法·leetcode·贪心算法
Shaoshing8 小时前
LeetCode100 49. 字母异位词分组
java·算法
YFJ_mily8 小时前
第二届区块链技术与基础模型国际学术会议(BTFM2027)
算法·区块链·能源·智能系统·rdlink研发家·机器人自动化
汤姆宝库9 小时前
收官深拆:第一性原理、产业电网与未来推演
大数据·人工智能·算法
moshuying11 小时前
块扩散 + GDN 改造:Clover 把「并行生成」塞进了 Agent 的长上下文里
前端·算法
没落之王11 小时前
历史系统建模:宋初太祖太宗「再立天庭」秩序重构推演
人工智能·算法·重构
INGNIGHT12 小时前
91 · 最小调整代价(序列dp)
数据结构·算法·leetcode
moshuying12 小时前
扩散模型开始写代码、开网页了:350 亿参数,速度比 Jev 快一倍
前端·算法
小超人诞生日记12 小时前
C++ 异常机制详解:从抛出捕获到异常安全
c++·算法