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

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++;
        }
    }
};
相关推荐
ting945200013 小时前
Humalike X Hermes 深度技术剖析:单指令注入群聊社交智能的底层架构、算法与跨 IM 平台实现
人工智能·算法·架构
吴声子夜歌13 小时前
Java面试——算法
java·算法·面试
evans在进步13 小时前
LeetCode 64:最小路径和——Java 原地动态规划详解
java·leetcode·动态规划
h_a_o777oah13 小时前
【图论】Tarjan 缩点:解决有向图中环的问题
c++·算法·图论·acm·强连通分量·缩点·tarjan
Tisfy13 小时前
LeetCode 1386.安排电影院座位:哈希表+位运算
算法·leetcode·散列表·题解·哈希表
Nil20814 小时前
leetcode 199二叉树的右视图
算法·leetcode·深度优先
M78佐菲15 小时前
c语言学习笔记:排序与查找方法整理
linux·c语言·笔记·学习·算法
AI备案指南-满满17 小时前
人工智能拟人化互动服务安全自评估报告的评估要点有哪些?
人工智能·算法·安全·机器人·大模型备案·算法备案
土司大王18 小时前
LeetCode hot100——两两交换链表中的节点
算法·leetcode·职场和发展