(C++)移动零--双指针法

简介: (C++)移动零--双指针法

个人主页:Lei宝啊

愿所有美好如期而遇


算法原理

双指针法,不一定是说就要使用指针,只是一种形象的说法,在数组中,我们一般将数组下标当做指针,比如我们定义cur,dest,cur的左边都是处理过的,dest左边的都是非0,dest和cur中间的都是0。开始我们将cur赋值0,因为我们不知道下标为0的元素是否是0,所以dest我们赋值为-1,如果cur指向的元素值为0,那么cur++,如果不为0,那么dest++,然后和cur指向的元素交换值,cur++。我们重复上述步骤,直到cur走到尽头。

图示

代码

class Solution {
public:
    void moveZeroes(vector<int>& nums) 
    {
        int cur = 0;
        int dest= -1;
        while(cur < nums.size())
        {
            if(nums[cur] != 0)
            {
                swap(nums[cur++],nums[++dest]);
            }
            else
            {
                cur++;
            }       
        }        
    }
};


目录
相关文章
|
6月前
|
算法
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
|
5月前
|
存储 算法 数据挖掘
LeetCode 题目 88:双指针\直接\递归\插入排序\归并排序 实现合并两个有序数组
LeetCode 题目 88:双指针\直接\递归\插入排序\归并排序 实现合并两个有序数组
|
6月前
|
算法 C++
(C++)三数之和--双指针法
(C++)三数之和--双指针法
42 0
|
6月前
|
算法 C++
(C++)四数之和--双指针法
(C++)四数之和--双指针法
49 0
|
6月前
|
算法 图计算 容器
class050 双指针技巧与相关题目【算法】
class050 双指针技巧与相关题目【算法】
45 0
算法学习--双指针与二分查找
算法学习--双指针与二分查找
力扣82删除排序链表中的重复元素 II:思路分析+代码实现+方法总结(三指针法&快慢指针法【双指针】&递归法)
力扣82删除排序链表中的重复元素 II:思路分析+代码实现+方法总结(三指针法&快慢指针法【双指针】&递归法)
69 0
|
存储
力扣 -- 15.三数之和
力扣 -- 15.三数之和
|
存储 算法 安全
LeetCode算法小抄 -- 链表(快慢指针、双指针、回文链表)
LeetCode算法小抄 -- 链表(快慢指针、双指针、回文链表)
|
算法
LeetCode每日1题--三数之和
LeetCode每日1题--三数之和
79 0