📌  相关文章
📜  将所有零移动到数组末尾的 C++ 程序Set-2(使用单次遍历)(1)

📅  最后修改于: 2023-12-03 14:53:51.030000             🧑  作者: Mango

将所有零移动到数组末尾的 C++ 程序Set-2(使用单次遍历)

在处理一个包含数字的数组时,我们有时需要将所有的零移动到数组的末尾。这可以通过多种方法来实现,本文将介绍一种基于单次遍历的方法。

算法

我们定义两个指针i和j,将i指向第一个元素,将j指向最后一个元素。然后,我们开始遍历数组,当遇到非零元素时,将它交换到i所指向的位置,然后将i向后移动一位。当遇到零元素时,将j向前移动一位,直到它指向第一个非零元素的位置,然后将它交换到i所指向的位置,再将i向后移动一位。

通过这种方法,我们最终可以将所有的零元素都移动到数组的末尾,并保持其它元素的相对顺序。

代码实现

下面是使用C++语言实现该算法的代码片段:

void moveZeroes(vector<int>& nums) {
    int n = nums.size();
    int i = 0, j = n-1;
    while(i <= j) {
        if(nums[i] == 0) {
            swap(nums[i], nums[j]);
            j--;
        }
        else {
            i++;
        }
    }
}
代码解释

该程序使用了C++ STL库中的vector容器来存储数组。函数moveZeroes的参数num是一个指向vector类型的引用。在函数内部,我们首先定义了数组的长度n,以及两个指针i和j。然后,我们使用while循环来遍历数组。

在循环的每个迭代中,我们首先检查nums[i]是否等于0。如果是,我们就交换nums[i]和nums[j]的值,并将j向前移动一位。如果不是,我们就将i向后移动一位。当循环结束时,所有的零元素都被移动到了数组的末尾。

总结

通过使用单次遍历,我们可以将数组中的所有零元素移动到末尾,从而在保持其它元素的相对顺序的同时,将数组变成一个更加规整和易于处理的形式。这种方法的时间复杂度为O(n),空间复杂度为O(1),效率很高。