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

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++;
        }
    }
};
相关推荐
悄悄敲敲敲10 分钟前
C++第14届蓝桥杯b组学习笔记
c++·学习·算法·蓝桥杯
佚明zj34 分钟前
[ISP 3A ] AE的常用算法分析
算法·计算机视觉·接口隔离原则
山海不说话1 小时前
从零搭建微服务项目Pro(第7-1章——分布式雪花算法)
分布式·算法·spring·微服务·架构
手握风云-1 小时前
优选算法的妙思之流:分治——归并专题
数据结构·算法·排序算法
梭七y1 小时前
【力扣hot100题】(063)搜索二维矩阵
算法·leetcode·职场和发展
哦吼!2 小时前
算法基础-枚举
算法
重生之我要成为代码大佬2 小时前
从零讲透DFS-深度优先搜索-2(排序与组合)
开发语言·python·算法·深度优先遍历
uhakadotcom2 小时前
快速理解 tiktoken:OpenAI 模型的高效 BPE 分词器
算法·面试·github
鲸鱼宝宝成长记2 小时前
[蓝桥杯青少年组省赛 2024] 通关游戏的最少能量值
数据结构·算法
upward_growth2 小时前
一叶障目 -- 你不知道的"最长递增子序列"!
前端·javascript·算法